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(); // 从存储中获取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. 刷新token

    2024-06-18 21:32:04       21 阅读
  2. token刷新

    2024-06-18 21:32:04       10 阅读
  3. token刷新

    2024-06-18 21:32:04       5 阅读
  4. 前端实现token刷新的原因和步骤

    2024-06-18 21:32:04       36 阅读
  5. 前端实现双token刷新技术方案

    2024-06-18 21:32:04       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 21:32:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 21:32:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 21:32:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 21:32:04       20 阅读

热门阅读

  1. 【HarmonyOS NEXT 】鸿蒙detectBarcode (图像识码)

    2024-06-18 21:32:04       6 阅读
  2. Flink 计数器Accumulator

    2024-06-18 21:32:04       6 阅读
  3. MySQL触发器基本结构

    2024-06-18 21:32:04       8 阅读
  4. Roboflow对YOLO数据集、标注、训练、下载

    2024-06-18 21:32:04       8 阅读
  5. Bean 的生命周期

    2024-06-18 21:32:04       5 阅读
  6. web前端开发哪个城市:探索最佳发展地

    2024-06-18 21:32:04       9 阅读
  7. Linux中的进程控制

    2024-06-18 21:32:04       7 阅读
  8. 高并发系统中面临的问题 及 解决方案

    2024-06-18 21:32:04       4 阅读
  9. Vue 3 的 setup 函数使用及避坑指南

    2024-06-18 21:32:04       6 阅读
  10. leetcode-11-二叉树前中后序遍历以及层次遍历

    2024-06-18 21:32:04       6 阅读
  11. API接口被刷 如何解决

    2024-06-18 21:32:04       6 阅读
  12. 机器学习中的神经网络入门

    2024-06-18 21:32:04       6 阅读
  13. C++中的访问者模式

    2024-06-18 21:32:04       4 阅读
  14. 双指针练习:和为s的两个数字

    2024-06-18 21:32:04       5 阅读
  15. CVPR2024 分割Segmentation相关论文37篇速览

    2024-06-18 21:32:04       6 阅读