当前位置: 首页 > 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);}
);

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

http://www.lryc.cn/news/375469.html

相关文章:

  • Golang的协程调度器GMP
  • C++ 后端,Vue前端
  • 使用Navicat Premium向mysql插入2000000条数据
  • docker命令记录
  • Java学习七
  • 麒麟Kylin | 操作系统的安装与管理
  • 数据结构预备知识(Java):包装类泛型
  • 掌握Linux Vim:从基础到高级的全面指南
  • 打好“组合拳”,实现国有企业降本增效
  • 四川古力未来科技有限公司抖音小店解锁电商新机遇
  • Maven之介绍
  • 简单了解java中的File类
  • 边缘检测(一)-灰度图像边缘检测方法
  • 2025计算机毕业设计选题题目推荐-毕设题目汇总大全
  • 简易版 | 代码生成器(包含插件)
  • 【Python】Redis数据库
  • 理解并应用:JavaScript响应式编程与事件驱动编程的差异
  • 第4天:用户认证系统实现
  • PostgreSQL源码分析 —— FunctionScan
  • 数据结构-十大排序算法集合(四万字精讲集合)
  • SpringBoot三层架构
  • uniapp微信小程序局部刷新,无感刷新,修改哪条数据刷新哪条
  • golan的雪花id
  • RK3568 CAN波特率500K接收数据导致CPU4满载
  • AI实战 | 使用元器打造浪漫仪式小管家
  • 什么是隐马尔可夫模型?
  • qt中使用qsqlite连接数据库,却没有在本地文件夹中生成db文件
  • Django的‘通用视图TemplateView’
  • java功能实现在某个时间范围之内输出true,不在某个范围输出false,时间精确到分钟
  • macbook屏幕录制技巧,这2个方法请你收好