javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > 前端双Token无感刷新

前端登录token失效实现双Token无感刷新详细步骤

作者:扶苏1002

实现token无感刷新对于前端来说是一项非常常用的技术,其本质是为了优化用户体验,这篇文章主要介绍了前端登录token失效实现双Token无感刷新的相关资料,需要的朋友可以参考下

一、方案背景

在用户登录系统后,为了保障安全性和用户体验,通常采用Token机制进行身份验证。然而,单一的 Token 存在过期问题,导致用户需要频繁重新登录,影响使用体验。为解决这一问题,本方案提出采用双Token机制实现前端登录不掉线的无感刷新。

二、方案目标

三、技术原理

3.1. 双 Token 机制

3.2. 无感刷新流程

四、具体实现步骤

4.1. 登录流程

4.2. 请求拦截

axios.interceptors.request.use((config) => {
  const access_token = localStorage.getItem("access_token");
  if (access_token) {
    config.headers.Authorization = `Bearer ${access_token}`;
  }
  return config;
});

4.3. 响应拦截与刷新

axios.interceptors.response.use(
  (response) => {
    return response;
  },
  async (error) => {
    const { data, status, config } = error.response;
    if (status === 401 && config.url !== "/refresh") {
      const isRefreshing = false;
      if (!isRefreshing) {
        isRefreshing = true;
        try {
          const res = await api.get("/refresh", {
            params: {
              token: localStorage.getItem("refresh_token"),
            },
          });
          localStorage.setItem("access_token", res.data.access_token);
          localStorage.setItem("refresh_token", res.data.refresh_token);
          isRefreshing = false;
          // 重新发送之前被拦截的请求
          return api(config);
        } catch (err) {
          // 刷新失败,跳转到登录页面
          window.location.href = "/login";
        }
      } else {
        // 将请求添加到队列中,等待刷新完成后再重新发送
        requests.push(() => api(config));
      }
    }
    return Promise.reject(error);
  }
);

4.4. 错误处理:

五、安全性考虑

六、性能优化

七、总结

本方案通过采用双 Token 机制,实现了前端登录不掉线的无感刷新。在保障系统安全性的前提下,提高了用户体验,减少了用户频繁重新登录的麻烦。同时,通过合理的安全性考虑和性能优化措施,确保系统的稳定性和高效性。在实际应用中,可以根据具体业务需求进行适当的调整和优化。

到此这篇关于前端登录token失效实现双Token无感刷新的文章就介绍到这了,更多相关前端双Token无感刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文