当前位置: 首页 > news >正文

token无感刷新

Token无感刷新通常指的是在用户不知情的情况下自动刷新认证Token,以保持用户的会话状态。这通常在使用JWT(JSON Web Tokens)作为认证方式时使用。以下是实现无感刷新的一种常见方法:

1. 前端请求拦截:

  • 在发送请求前,检查Token的有效期。
  • 如果Token即将过期(例如,距离过期时间小于5分钟),则自动发送一个刷新Token的请求。

2. 后端刷新逻辑:

  • 后端接收到刷新Token的请求后,验证旧Token的有效性。
  • 如果旧Token有效,后端生成一个新的Token并返回。

3. 前端响应拦截:

  • 捕获到需要认证的请求(例如401状态码:HTTP401错误代表用户没有访问权限,需要进行身份认证),自动重发刷新Token的请求。
  • 使用新的Token重发原请求。

4. 存储和替换Token:

  • 前端在接收到新的Token后,替换存储中的旧Token。

这种机制确保了用户在使用应用时,Token可以在用户不知情的情况下被更新,避免了用户因Token过期而需要重新登录的情况。



 前端(使用Axios拦截器)

axios.interceptors.request.use(async (config) => {const token = getToken(); // 从存储中获取Tokenconst tokenExpiration = getTokenExpiration(); // 获取Token的过期时间const now = Date.now();if (token && tokenExpiration && (tokenExpiration - now < 5 * 60 * 1000)) {// Token即将过期,需要刷新const newToken = await refreshToken(); // 刷新Token的函数setToken(newToken); // 更新存储中的Tokenconfig.headers['Authorization'] = `Bearer ${newToken}`;}return config;},error => Promise.reject(error)
);axios.interceptors.response.use(response => response,async (error) => {if (error.response.status === 401) {// Token过期,需要刷新const newToken = await refreshToken();setToken(newToken);error.config.headers['Authorization'] = `Bearer ${newToken}`;return axios(error.config); // 重发原请求}return Promise.reject(error);}
);

这种方法确保了用户体验的连贯性,同时保持了系统的安全性。

相关文章:

  • 装饰者模式(设计模式)
  • JavaScript中的解构赋值
  • 为啥找对象千万别找大厂男,还好我不是大厂的。。
  • Python武器库开发-武器库篇之链接提取器(六十)
  • 【跟我学RISC-V】(三)openEuler特别篇
  • 园区无线网新架构:无CAPWAP的集中式转发
  • 一文详解:什么是小程序SDK?
  • java1.8运行arthas-boot.jar运行报错解决
  • 编程属于什么类学科门类:深入探索与解析
  • PDM 测试
  • idea自定义注释模板
  • Github 2024-06-15Rust开源项目日报Top10
  • 77道经典的软件测试面试题(答案+文档)
  • Windows Server 远程桌面显示登录界面而不是直接登录进入的问题
  • [Cloud Networking] Layer3 (Continue)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 10个最佳ES6特性 ES7与ES8的特性
  • 5、React组件事件详解
  • express.js的介绍及使用
  • JWT究竟是什么呢?
  • PAT A1017 优先队列
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python爬虫--- 1.3 BS4库的解析器
  • underscore源码剖析之整体架构
  • 分布式任务队列Celery
  • 规范化安全开发 KOA 手脚架
  • 马上搞懂 GeoJSON
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 数组的操作
  • 为视图添加丝滑的水波纹
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java总结 - String - 这篇请使劲喷我
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (11)MSP430F5529 定时器B
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)STL算法之比较
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (过滤器)Filter和(监听器)listener
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)C#调用WebService 基础
  • (转)socket Aio demo
  • (转)菜鸟学数据库(三)——存储过程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ... 是什么 ?... 有什么用处?
  • .dwp和.webpart的区别
  • .java 9 找不到符号_java找不到符号
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .naturalWidth 和naturalHeight属性,
  • .Net Core webapi RestFul 统一接口数据返回格式