【发布时间】:2018-04-01 10:28:48
【问题描述】:
我一直在关注this 教程,使用 lumen 和 vuejs 进行身份验证。我正在使用this 库(tymon/jwt-auth)。
一切正常。我的 API 为我的数据处理一切,并为我的前端框架提供一个令牌。我可以登录/注销,我需要一个验证令牌来发送 API 请求。
在Vuex 中有这个常量:
const state = {
isLogged: !!localStorage.getItem('token')
}
它正在检查是否有令牌,如果没有,将其设置为 false 并重定向到登录页面。但是,如果我手动将令牌添加到我的 cookie 中,我可以从我的 vue-router 访问每条路由并查看静态数据。当然,API 中没有数据可用,但如果令牌未验证(用户未登录),我不希望访问此路由。
我该如何处理?我是否必须每次都使用 ajax 调用进行检查?我实际上正在使用这个:
router.beforeEach((to, from, next) => {
const auth = store.state.auth;
if (to.name == "logout" || to.name == "login") {
next();
} else {
if (store.state.isLogged) {
next();
} else {
next('/');
}
}
})
我认为唯一的解决方案是 Ajax 调用,因为我们无法在 vuejs 中进行验证,不是吗?
【问题讨论】:
-
验证和确认仅在服务器端进行。客户端总是有一种方法可以访问已经加载的隐藏内容。如果您的服务器端总是期望并检查 JWT,那么如果用户手动设置
token就没有问题。他们可以看到登录状态,但他们不能使用任何东西,因为 API 调用包含无效的 JWT 信息。 -
如果你想对未登录用户隐藏“登录状态”组件,然后将它们打包到另一个模块中,该模块在用户登录后会延迟加载。跨度>
-
问题是用户可以在没有验证令牌的情况下继续任何 vue-route。当然,当我使用 ajax 调用时不会有数据,因为他没有验证令牌,但他仍然可以看到静态数据,我不想要它。
标签: javascript laravel vue.js lumen