有可以使token暂时过期的方法吗 - 爱问答

(爱问答)

有可以使token暂时过期的方法吗

想验证当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更新的过程。

 

三、具体实现

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

缓存工具类 Storage

var Storage = {    // ==================sessionsTorage设置缓存================    // 设置缓存    sessionSet: function (name, data) {        sessionStorage.removeItem(name)        sessionStorage.setItem(name, JSON.stringify(data))    },    // 获取缓存    sessionGet: function (name) {        return JSON.parse(sessionStorage.getItem(name))    },    // 清除缓存    sessionRemove: function (name) {        sessionStorage.removeItem(name)    },    // ==================localStorage设置缓存==================    // 设置缓存    localSet: function (name, data) {        localStorage.removeItem(name)        localStorage.setItem(name, JSON.stringify(data))    },    // 获取缓存    localget: function (name) {        return JSON.parse(localStorage.getItem(name))    },    // 清除缓存    localRemove: function (name) {        localStorage.removeItem(name)    }}export default Storage


下一篇:surfacego登陆不进桌面了怎么办

上一篇:为什么我的支付宝我收不到验证码?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?