【问题标题】:Validating JWT Token in vue.js Router在 vue.js 路由器中验证 JWT 令牌
【发布时间】:2020-11-17 04:42:13
【问题描述】:

我正在使用以下代码生成 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 node.js vue.js jwt vue-router


    【解决方案1】:

    让我从这个开始:您保护路线的目标是通过进入一个尝试检索他们无权查看的信息的页面来防止用户体验不佳。

    因此,您无需在客户端验证令牌。由于只有当服务器验证用户并返回一个令牌时,令牌才会在手边,因此您(客户端代码的作者)可以使用令牌的存在作为通知用户通过什么路径的手段。

    换句话说,拥有令牌的客户端是您允许用户通过受保护路由所需的全部验证。

    请记住,受保护的页面本身并没有私有数据。受保护的页面将始终从服务器检索受保护的数据,这意味着服务器毕竟有机会对令牌进行身份验证。

    【讨论】:

    • 这样说:在保护路线方面,您最关心的是什么?您实际上只是在必要时尝试将用户引导到登录表单。您要避免的是让用户进入一个无用的页面,因为当用户未通过身份验证时,它需要受保护的 API 调用。为什么手头的令牌不足以让您至少允许用户进入下一步?
    • 好的,我做了最后一次澄清。我希望这里有一些价值。
    • 路由器旨在重新呈现客户端而不是发出服务器请求。也就是说,您可以通过多种方式观察路由更改,并在捕获某些更改时调用 API 调用来查询服务器。
    • 非常感谢 crosen9999 的时间、帮助和解释。我终于明白了你的答案以及路由器的工作原理!
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 2019-07-20
    • 2019-06-23
    • 2017-07-27
    • 2019-10-20
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多