token无感刷新

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

  1. 前端请求拦截:
  • 在发送请求前,检查Token的有效期。
  • 如果Token即将过期(例如,距离过期时间小于5分钟),则自动发送一个刷新Token的请求。
  1. 后端刷新逻辑:
  • 后端接收到刷新Token的请求后,验证旧Token的有效性。
  • 如果旧Token有效,后端生成一个新的Token并返回。
  1. 前端响应拦截:
  • 捕获到需要认证的请求(例如401状态码:HTTP401错误代表用户没有访问权限,需要进行身份认证),自动重发刷新Token的请求。
  • 使用新的Token重发原请求。
  1. 存储和替换Token:
  • 前端在接收到新的Token后,替换存储中的旧Token。

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


前端(使用Axios拦截器)

javascript 复制代码
axios.interceptors.request.use(
  async (config) => {
    const token = getToken(); // 从存储中获取Token
    const tokenExpiration = getTokenExpiration(); // 获取Token的过期时间
    const now = Date.now();

    if (token && tokenExpiration && (tokenExpiration - now < 5 * 60 * 1000)) {
      // Token即将过期,需要刷新
      const newToken = await refreshToken(); // 刷新Token的函数
      setToken(newToken); // 更新存储中的Token
      config.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);
  }
);

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

相关推荐
星海拾遗1 分钟前
react源码从入门到入定
前端·javascript·react.js
小满zs3 分钟前
Next.js第二十五章(CSS方案)
开发语言·javascript·css
wuhen_n8 分钟前
JavaScript事件循环(下) - requestAnimationFrame与Web Workers
开发语言·前端·javascript
Hexene...25 分钟前
【前端Vue】出现elementui的index.css引入报错如何解决?
前端·javascript·vue.js·elementui
红色的小鳄鱼25 分钟前
Vue 监视属性 (watch) 超全解析:Vue2 Vue3
前端·javascript·css·vue.js·前端框架·html5
web小白成长日记25 分钟前
Vue-实例从 createApp 到真实 DOM 的挂载全历程
前端·javascript·vue.js
一起养小猫43 分钟前
Flutter for OpenHarmony 实战:打造功能完整的云笔记应用
网络·笔记·spring·flutter·json·harmonyos
微祎_1 小时前
Flutter for OpenHarmony:构建一个 Flutter 旋转迷宫游戏,深入解析网格建模、路径连通性检测与交互式解谜设计
javascript·flutter·游戏
红色的小鳄鱼1 小时前
Vue 教程 自定义指令 + 生命周期全解析
开发语言·前端·javascript·vue.js·前端框架·html
●VON1 小时前
React Native for OpenHarmony:解构 TouchableOpacity 的触摸反馈与事件流控制
javascript·学习·react native·react.js·性能优化·openharmony