
Token令牌无感刷新
本文最后更新于 2024-10-16,文章已经超过3个月未更新,无法保证其有效性,各位大佬请自由斟酌。
“无感刷新” 指的是在用户不感知的情况下,后台自动处理令牌刷新,并确保后续请求能够继续使用有效的令牌。为实现这种效果,通常会在令牌即将过期时提前刷新,以避免在实际请求时遇到 401 或其他认证失败的响应。
以下是无感刷新令牌的常见一般就两种实现思路:
请求提前根据揭露的过期时间提前做令牌刷新
优势:可以减少后端的请求次数,在第一个请求请求之前就可以判断是会否需要刷新令牌了,避免了不必要的网络开销,也能更好的的控制并发
劣势:如果电脑时间改动,前后端没有约定好当前系统时间处理的话,就会导致每次请求都在这刷新令牌
根据接口响应值做令牌刷新
优势:不需要顾忌电脑时间的改动,也不需要去考虑过期时间,直接以接口响应的状态来判断是否需要刷新令牌
劣势:刷新令牌依据接口响应,会多造成必要的网络开销,以及对大量请求的场景会造成接口响应积压的情况
由于两种方式,只是在处理令牌刷新的位置不同,其他需要注意的逻辑基本一样
比如:
刷新后更新请求:在令牌刷新后,自动更新后续所有请求的令牌。
并发请求的处理:如果多个请求同时触发令牌刷新,避免重复刷新。
以下axios
举例,以博主自己常用的方式 根据接口响应值做令牌刷新
介绍大概的用法
安装
请挑选适合自己的安装方式
导入,声明
拦截器声明
博主个人习惯请求拦截和响应拦截单独写一个文件,看官们请根据自己喜好,爱咋搞就咋搞
创建request_interceptors.js
与response_interceptors.js
文件,并编写代码
request_interceptors.js
这个部分比较简单
为所有请求赋值请求令牌
为所有请求赋值请求时间
response_interceptors.js
1. 导入store,并声明两个变量来方便我们控制并发处理
2. 创建刷新令牌的api方法
3. 声明拦截方法
由于博主的api并非使用状态码401的形式,所以此处以拦截器的success
方法为例
首先声明success方法
4. 检验返回值
博主这里的接口响应值格式是:{ "resCode": 0, "resMsg":"" }
所以以这个格式来举例
5. 校验令牌过期状态,并设置并发控制
博主这边令牌过期返回状态码为-201
6. 令牌刷新
主要逻辑
其实无感刷新的主要注意点是在于并发控制的问题:
同时多个请求触发,该如何有效的将第一个请求结果拦截,并无感刷新令牌后,重新请求
在刷新令牌期间后续得请求进来该如何拦截,并进额外处理
完整代码
- 感谢你赐予我前进的力量
本网站的原创文章部分资源内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系博主邮箱:zzyo.yj@outlook.com 进行删除处理
本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向博主举报
声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用CC BY-NC-SA 4.0 协议进行授权
转载:转载请注明原文链接 - Lycoris