javascript - 在 vue.js 路由器中验证 JWT 令牌
问题描述
我正在使用以下代码生成 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 的服务器上完成,而不是在客户端完成。
解决方案
让我从这个开始:您保护路由的目标是通过进入一个尝试检索他们无权查看的信息的页面来防止用户体验不佳。
因此,您无需在客户端验证令牌。由于只有当服务器验证用户并返回一个令牌时,令牌才会在手边,因此您 - 客户端代码的作者 - 可以使用令牌的存在作为通知用户通过什么路线的手段。
换句话说,拥有令牌的客户端是允许用户通过受保护路由所需的全部验证。
请记住,受保护的页面本身并没有私有数据。受保护的页面将始终从服务器检索受保护的数据,这意味着服务器毕竟有机会验证令牌。
推荐阅读
- javascript - 在 div 中搜索特定单词
- javascript - 如何将构建器模式与 JavaScript 中的异步方法调用结合起来?
- php - 如何通过 INI 设置启用 mysqli 错误报告?
- konvajs - 如何在 Konva.js 阶段切换 y 轴以从下到上而不是从上到下开始?
- python - 使用 Tkinter 的计算器
- scala - Scala中具体用例的类型参数/抽象类型
- python - 如何使用 pyav 或 opencv 解码原始 H.264 数据的实时流?
- c++ - 是否可以实现一个交换尾随括号表达式的宏?
- c# - 在 C# 中,如何在使用 CreateWindowEx Win32 API 调用创建的窗口上绘制背景?
- kubernetes - 如何解决 AzureFile mount error(22): Invalid argument inside container?