当前位置:   article > 正文

Vue刷新token,判断token是否过期、失效的最简便的方法_vue怎么判断token是否过期

vue怎么判断token是否过期

这篇文章可能存在漏洞,可以借鉴,不一定对,时间太久了,不想看逻辑了,不改了,请原谅。。。

 

看了许多小伙伴分享的刷新token和判断token是否失效的方法,个人感觉有些难懂和不够简便。现结合个人开发实践分享一下使用vue axios请求拦截的方法来刷新token和判断token是否过期、失效的方法。

刷新token和token是否过期的操作都是由后端实现,前端只负责根据code的不同状态来做不同的操作:

一、判断token是否过期、失效

举例:一般响应状态码 code :0,表示请求成功。①响应状态码 code:10010表示token过期 ②响应状态码 code:10011 表示token无效。这些状态码都由你自己和后端的同学一起定义。code等于10010和10011这两种状态都会跳转到登录页,重新进行登录并获取最新的token。

二、在一定时间内刷新token

为什么需要刷新token?因为出于安全性的考虑,一般是一天或几个小时更新token,看项目需要。

怎么实现?我和后端的同学是这么定义的,在发送任何一次请求时,如果需要更新token,响应体中后端的同学给我返回了token这个字段,token出现在了响应体中,说明这时候是需要刷新token的(其他非刷新token的请求时是没有token字段的),这时用localStorage保存最新token,自动覆盖掉原来旧的token,这样下次再调用新接口时用的就是最新的token了,这样用户也感知不到token更新的过程。

        

三、具体实现

  1. /**
  2. * 全局变量 和 设置 、配置等。。。
  3. */
  4. import axios from 'axios' // 引入axios
  5. import Storage from '@/assets/js/util/storage.js' // storage工具类,简单的封装
  6. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
  7. /* 请求拦截器 */
  8. axios.interceptors.request.use(function (config) { // 每次请求时会从localStorage中获取token
  9. let token = Storage.localGet('token')
  10. if (token) {
  11. token = 'bearer' + ' ' + token.replace(/'|"/g, '') // 把token加入到默认请求参数中
  12. config.headers.common['Authorization'] = token
  13. }
  14. return config
  15. }, function (error) {
  16. return Promise.reject(error)
  17. })
  18. /* 响应拦截器 */
  19. axios.interceptors.response.use(function (response) { // ①10010 token过期(30天) ②10011 token无效
  20. if (response.data.code === 10010 || response.data.code === 10011) {
  21. Storage.localRemove('token') // 删除已经失效或过期的token(不删除也可以,因为登录后覆盖)
  22. router.replace({
  23. path: '/login' // 到登录页重新获取token
  24. })
  25. } else if (response.data.token) { // 判断token是否存在,如果存在说明需要更新token
  26. Storage.localSet('token', response.data.token) // 覆盖原来的token(默认一天刷新一次)
  27. }
  28. return response
  29. }, function (error) {
  30. return Promise.reject(error)
  31. })

 

缓存工具类 Storage

  1. var Storage = {
  2. // ==================sessionsTorage设置缓存================
  3. // 设置缓存
  4. sessionSet: function (name, data) {
  5. sessionStorage.removeItem(name)
  6. sessionStorage.setItem(name, JSON.stringify(data))
  7. },
  8. // 获取缓存
  9. sessionGet: function (name) {
  10. return JSON.parse(sessionStorage.getItem(name))
  11. },
  12. // 清除缓存
  13. sessionRemove: function (name) {
  14. sessionStorage.removeItem(name)
  15. },
  16. // ==================localStorage设置缓存==================
  17. // 设置缓存
  18. localSet: function (name, data) {
  19. localStorage.removeItem(name)
  20. localStorage.setItem(name, JSON.stringify(data))
  21. },
  22. // 获取缓存
  23. localGet: function (name) {
  24. return JSON.parse(localStorage.getItem(name))
  25. },
  26. // 清除缓存
  27. localRemove: function (name) {
  28. localStorage.removeItem(name)
  29. }
  30. }
  31. export default Storage

最后,在评论有同学提到并发请求时,因为请求的过程快慢不同,token有可能还是旧的token。所以对于并发请求的情况还是要结合promise来使用

可以参考:https://segmentfault.com/a/1190000016946316?utm_source=tag-newest

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/715595
推荐阅读
相关标签
  

闽ICP备14008679号