【发布时间】:2021-05-06 09:40:39
【问题描述】:
登录后,我有一个 cookie 。我想知道,我的应用程序是否可以检测 cookie 是否已过期,然后强制注销操作?或者只是强制路由器推送到 /login
是否需要通过 axios 拦截器响应或在路由器守卫中完成?
【问题讨论】:
登录后,我有一个 cookie 。我想知道,我的应用程序是否可以检测 cookie 是否已过期,然后强制注销操作?或者只是强制路由器推送到 /login
是否需要通过 axios 拦截器响应或在路由器守卫中完成?
【问题讨论】:
据我所知,您有两个选择。
选项 1(推荐)
在响应对象上设置一个 axios 拦截器,并监听服务器返回的响应。特别是错误代码。如果服务器发送 401,您可以注销用户或请求新的访问令牌以保持用户登录。您可以使用此 npm library 来实现 axios 拦截器。使用该库,您可以提及要收听的错误代码。因此,对于所有涉及过期访问令牌的情况,我通常会从服务器发送 498 错误代码,这样我就更容易区分过期和未经授权的令牌。
选项 2(不推荐)
您可以使用此npm library 在前端解码 JWT 并从令牌中提取到期时间。创建一个setInterval() 函数,定期检查当前时间是否大于或等于到期时间。如果是真正的注销用户或请求一个新的令牌。
选择选项 1,因为验证令牌或其到期时间是身份验证服务器的工作,而不是其他人的工作。前端不应该负责决定令牌是否有效。此外,您不必使用 setInterval() 或 setTimeout(),因为您还必须考虑其他边缘情况。
【讨论】:
500代码而不是401?