关于 Token 过期问题的两种解决方案

article/2025/6/29 7:35:09

 对于token过期,我们有两种方案:

 

方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。

我们希望当响应返回的数据是401身份过期时,让当前浏览页面强行跳转到登入页面,让用户手动更新token。拿到最新的token值后再跳回之前浏览的页面。增强用户体验。

实现原理:

阻拦响应器中配置:

// 阻拦响应器
request.interceptors.response.use(function (response) {return response
}, async function (error) {if (error.response && error.response.status === 401) {// token续签方式1://清空当前vuex保存的token(我们这的vuex和本地已经建立了关系,相当于也清空了本地token)store.commit('upUser', '')console.log(router.currentRoute.fullPath)// 当前路由的完整路径(#后面的)//这里我们采用?path=的方式保存当前浏览页面的完整路径,// push()会产生历史记录 而replace不会有历史记录router.push({ path: `/login?path=${router.currentRoute.fullPath}` })}return Promise.reject(error)
})

再登入组件中给登入功能函数添加:

 this.$router.replace({
          path: this.$route.query.path || '/'
        })

// 1.点击登入async onSubmit () {try {const { data: res } = await loginAPI(this.user)//登录成功// 不严谨的返回上次浏览的页面// this.$router.back()// 推荐方式:// 登录后, 判断有未遂地址(有未遂地址的情况是:token过期,在阻拦响应器中实现对未遂地址的保存), 登入成功后跳转到未遂地址, 否则去/路径(跳到首页--这种情况是:用户主动前往登入页面的登入,没有未遂地址,登入成功后直接前往首页)// replace不会产生路由历史记录this.$router.replace({path: this.$route.query.path || '/'})// 存储获取过来的tokenthis.$store.commit('upUser', res.data)} catch (err) {console.log(err)if (err.response.status === 400) {this.$toast.fail('手机号或验证码错误')} else {this.$toast.fail('登入失败,请稍后再试') // 可能由于网络问题导致的登入失败}}},

方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我们刷新token值,而不是让用户手动更新token。拿到最新的token值后再重新发起刚刚因token过期的请求。从而实现无感知

前提是有后台的配合:

登入后后台接口返回值要求:必须提供刷新token的令牌

并且后台提供了刷新token的接口: (请求头要求是refresh_token)

注意:1. 在请求响应器中做判断在非刷新token的时候,给请求头配置token,而刷新token的时候,我们自己手动添加请求头为refresh_token

2.refresh_token也有过期的时候,这时只能强行让用户自己重新登入了

// 刷新用户token
export const updataTokenAPI = function () {return request({method: 'PUT',url: '/v1_0/authorizations',headers: {Authorization: `Bearer ${store.state.user.refresh_token}`}})
}

实现原理: 

import request from '@/utils/request'
import store from '@/store'// 请求响应器
request.interceptors.request.use(function (config) {// config :本次请求的配置对象// config 里面有一个属性:headersconst { user } = store.state
//请求头未配置信息的时候才会配置if (user.token && config.headers.Authorizatio === undefined) {config.headers.Authorization = `Bearer ${user.token}`}// 这里必须将config返回出去,否则请求会停在这 里return config
}, function (error) {// 如果请求出错(还没发送出去,可能是代码写错了的问题),就会进入这里return Promise.reject(error)
})// 阻拦响应器
request.interceptors.response.use(function (response) {return response
}, async function (error) {if (error.response && error.response.status === 401) {// token续签方式2: refreshToken(用户无感知)// 将过期的token值清空store.commit('updataToken', '')//请求刷新token接口const { data: res } = await updataTokenAPI()//保存新的token值store.commit('updataToken', res.data.token)// 再调用一次未完成的请求啊(用户无感知)// error.config 就是上一次axios请求的配置对象// console.dir(error.config)// 把新的token赋予到下一次axios请求的请求头中error.config.headers.Authorization = 'Bearer ' + res.data.token// return到await的地方,将未完成的请求再次发起,return axios(error.config)} else if (error.response.status === 500 && error.config.url === '/v1_0/authorizations') {// 因为500的情况有很多种,refresh_token失效也是其中一种情况,所有再加上error.config.url === '/v1_0/authorizations'条件,确保是refresh_token失效情况// 清空所有的token和refresh_toekn,并且强制跳转登录页面store.commit('upUser', {})router.push({ path: '/login' })Toast.fail('身份已过期')}return Promise.reject(error)
})

 


http://chatgpt.dhexx.cn/article/PEsRqF5S.shtml

相关文章

Latex 符号(Symbols)

Latex符号广泛用于数百个类别的不同主题中。对于数学或其他学科中使用的每个符号,将使用相应的命令。本主题将为您提供有关符号的详细概念和说明,以及以哪种方式可以使用所有符号。 使用标准文本,您可以使用任何符号。这种方法不仅节省了精力…

Latex特殊符号汇集

原文链接:https://blog.csdn.net/ying_xu/article/details/51240291 这段时间用Latex很多,常常需要查阅相关特殊的符号,这里做一个整理,也方便大家查阅。 摘自:《一份不太简短的LATEX2介绍》或112分钟学会LATEX2 原…

(13.1)Latex符号、公式及伪代码

文章目录 一、符号大全和小工具1、符号大全2、小工具(1)图片转Latex(2)在线Latex公式编辑 二、公式格式三、伪代码四、注意事项1、符号宏包2、颜色宏包3、换段未缩进4、单引号和双引号 一、符号大全和小工具 1、符号大全 Latex …

LaTex常见数学符号与示例

在写文档或者博客过程中,数学公式是最难表示的,比如根号,下标号,分号,还有绝对值的表示,复杂一些的比如矩阵的表示,积分的表示,求和公式。 LaTex提供了丰富的表示方法,用…

Latex数学符号对应表

Latex数学符号对应表 - 叮叮当当sunny - 博客园 目录 1. 希腊字母2. 运算符符号3. 关系符号4. 箭头符号5. 括号符号6. 其他符号7. MATLAB 回到顶部 1. 希腊字母 字母实现字母实现αα\alphaAA\Alphaββ\betaBB\Betaγγ\gammaΓΓ\Gammaδδ\deltaΔΔ\Deltaϵϵ\epsilon…

LateX各种命令符号

函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\tilde{\iota} 函数 语法效果语法效果语法效果\sin\theta\cos\theta\tan\theta\arcsin\frac{L}{r}\arccos\frac{T}{r}\arctan\frac{L}{…

Latex特殊符号大全(高清)

Latex符号大全 转载内容供自己阅读 原文:Latex特殊符号大全(高清)

Latex常见符号对照表

摘要: Latex可以很方便的利用命令来生成各式各样的特殊符号. 这里根据官方的文档将这些常见符号列出, 以备查用. B.1 希伯来和希腊字母(Hebrew and Greek letters) 希伯来语: 希腊语: 数学表达式中常常用下面的这些符号, 分小写/大写 B.2 二元关系符(Binary relations) …

LaTeX最全的数学符号大全(更新中…… )

文章目录 1 基本字符常用数集字母字母加标表示希腊字母 2 四则运算运算符号等号比较范围 3 常用函数4 离散数学运算符5 集合集合表示集合操作集合关系 最后更新于2020/12/02 1 基本字符 常用数集字母 符号 LaTeX \LaTeX LATE​X符号说明示例 N \mathbb{N} N\mathbb{N}自然数集…

Latex所有常用数学符号吐血整理(包含大括号、等式对齐、矩阵)

果然是自己搞一个查起来会方便一些,最近天天写数学题解,全是公式 ~ 希腊字母: 字母名称国际音标大写字母小写字母字母名称国际音标大写字母小写字母alpha/lfə/Ααnu/nju:/Ννbeta/bi:tə/或 /beɪtə/Ββxi希腊 /ksi/;英美 …

LaTeX 符号命令大全

函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \tilde{\iota} 函数 语法效果语法效果语法效果\sin\theta \cos\theta \tan\theta \arcsin\frac{L}{r} \arc…

LaTeX 各种命令,符号

转载下来用于学习。转自: https://blog.csdn.net/anxiaoxi45/article/details/39449445 函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\tilde{\iota} 函数 语法效果语法效…

LaTeX符号大全-基于lshort-zh-cn

文章目录 1、几个注意事项2、文本/数学模式通用符号3、希腊字母4、二元关系符5、二元运算符6、巨算符7、数学重音符号8、箭头9、作为重音的箭头符号10、定界符11、用于行间公式的大定界符12、其他符号13、AMS希腊字母和希伯来字母14、AMS二元关系符15、AMS二元运算符16、AMS箭头…

【收藏向】LaTeX 符号大全

你想找的LaTeX符号,这里都有🥰 目录 一、希腊字母 二、古希腊字母 三、单目运算符 四、双目运算符 五、二进制运算符 六、集合符号 七、逻辑符号 八、几何符号 九、分隔符 十、箭头 十一、三角函数 一、希腊字母 二、古希腊字母 三、单目运算…

巡风探索

模块内容包括: ├─nascan │ │ NAScan.py # 网络资产信息抓取引擎 │ │ │ ├─lib │ │ cidr.py │ │ common.py 其他方法 │ │ icmp.py # ICMP发送类 │ │ log.py # 日志输出 │ │ mongo.py # 数据库连接 │ │ scan.…

基于循环神经网络的格兰杰因果网络重构

复杂网络建模的反问题是网络重构,获得节点之间的关系对于分析网络特性有着至关重要的作用。常用的网络重构方法有:1 相关性分析,2 压缩感知,3 动力学方程,4 因果分析,5 深度学习,6 概率图模型&a…

时序分析28 - 时序预测 格兰杰因果关系(中) python实践1

时序分析28 - 时序预测 - 格兰杰因果关系(中) Python 实践 1 上一篇文章我们介绍了格兰杰因果关系的基本概念、背景以及相关统计检验法。本篇文章我们使用Python编程实践一下。 实践1:股票价格数据之间的格兰杰因果关系 问题:苹果公司今天的股价是否…

格兰杰因果 / EEG脑电数据分析

(因为处理数据的时候需要用到格兰杰因果关系检验,相关的文献里又没有详细解释,但看格兰杰因果又有一些一知半解,于是自己学了一些相关的东西,整理了一下。) 格兰杰因果关系检验为2003年诺贝尔经济学奖得主…

ZincSearch轻量级全文搜索引擎入门到

ZincSearch轻量级全文搜索引擎入门到 Zinc是一个用于对文档进行全文搜索的搜索引擎。它是开源的,内置在 Go 中。Zinc不是从头开始构建索引引擎,而是构建在 bluge 之上,这是一个出色的索引库。ZincSearch特点: 无模式索引资源利用…