前端Token失效检测与自动登出机制详解

核心机制

1. storage 事件监听(跨标签页同步)

javascript

复制代码
window.addEventListener("storage", e => {
    "userToken" !== e.key || !yc(e.newValue) || yc(e.oldValue) || (
        // 检测到 token 被清空,触发登出
        oF.j.next({ method: "beUnauthenticated", args: { navigateToSignIn: true, isBanned: false } })
    )
});
  • yc 函数判断值是否为空/null/undefined:

    javascript

    复制代码
    let yc = e => {
        if (null === e || "" === e) return true;
        try { let t = JSON.parse(e); return null === t.value || void 0 === t.value || "" === t.value } catch { return false }
    };
  • 当 newValue 为空而 oldValue 非空时,触发 beUnauthenticated,跳转到登录页。

2. API 响应拦截(服务端 token 失效)

在 HTTP 拦截器 onAfterResponse / onResponseError 中处理:

javascript

复制代码
if (m.includes(r)) {  // m = [v.V.MISSING_TOKEN, v.V.INVALID_TOKEN]
    d.onTokenInvalid();  // 触发 beUnauthenticated
}

当后端返回 MISSING_TOKEN 或 INVALID_TOKEN 错误码时,自动调用登出逻辑。

3. 主动清除 token

登出函数 hB 中:

javascript

复制代码
await (0, to.d9)(...);   // 调用登出 API
n({ navigateToSignIn: true, isBanned: false });  // 触发 beUnauthenticated

4. 统一跳转逻辑 beUnauthenticated

javascript

复制代码
function fi(e) {
    let { navigateToSignIn: t, isBanned: n } = e;
    w.y.setStorageUserToken(null);   // 清空本地 token
    // ... 清理其他状态 ...
    t && fo(n ? nE.BANNED : nE.SIGN_IN);  // 跳转到登录页或被封禁页
}

完整流程

触发场景 检测方式 动作
其他标签页登出 storage 事件 当前标签页调用 beUnauthenticated
后端返回 token 失效 API 响应拦截 调用 beUnauthenticated
用户主动点击登出 调用登出 API 清除 token 并跳转
手动清空 localStorage storage 事件(同一标签页不触发,但跨标签页会) 同上

这样确保了无论 token 如何被置空或失效,前端都能可靠地跳转到登录页面。

相关推荐
福兮说2 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea2 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
科技观察哨2 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强3 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
今年下半年4 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理4 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
前端snow6 小时前
ai agent --- DeepAgents 中间件
前端
data analyse 4567 小时前
报表能自定义的国内统计工具有哪些
前端·数据分析