我正在使用以下代码生成JWT令牌:
jwt.sign(id, TOKEN_SECRET, { expiresIn: '24h' });
生成后,我将令牌发送给客户端,客户端将其存储在cookie中:
document.cookie = `session=${token}` + ';' + expires + ';path=/'
此外,我正在使用vue.js路由器进行导航。据我了解,如果在路由器文件中添加以下代码,则可以插入中间件以保护某些路由。
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth) {
let token = Vue.cookie.get('session')
if (token == null) {
next({
path: '/',
params: { nextUrl: to.fullPath }
})
}
} else {
next()
}
})
但是,我很难理解如何使用这种方法来验证JWT令牌的有效性,这需要在存储TOKEN_SECRET的服务器上而不是在客户端上进行。
谢谢你。
答案 0 :(得分:2)
首先让我开始:保护路线的目的是,通过转到将尝试检索未经授权查看的信息的页面来防止用户遭受不良体验。
因此,您不需要在客户端上验证令牌。由于只有在服务器验证了用户并返回令牌后才会有令牌,因此您(客户端代码的作者)可以使用令牌的存在作为一种手段,告知用户采用哪种路线。>
换句话说,拥有令牌的客户端就是您需要允许用户进入受保护路线的所有验证。
请记住,受保护的页面本身并不具有私有数据。受保护的页面将始终从服务器检索受保护的数据,这意味着服务器毕竟有机会对令牌进行身份验证。