Token过期需在请求前、响应后、页面加载时三节点主动拦截:响应拦截器捕获401/10001并清token跳登录页;路由守卫校验本地token时效性;登录成功后解析from_url精准还原页面,辅以时间毫秒比对、localStorage异常处理、Refresh Token隔离及并发锁机制。
Token 过期后的跳转请求不能靠“猜”或“等用户点进来才处理”,必须在请求发起前、响应返回后、页面加载时三个关键节点主动拦截,形成闭环防御。
这是最可靠的实时判断依据。后端对过期 Token 通常返回标准状态码(如 401)或业务码(如 code: 10001),前端应在 axios/dio/uni.request 等统一响应拦截器中处理:
localStorage.removeItem('auth_token'))window.location.replace 或 uni.reLaunch 跳转登录页,并携带当前路径:/login?from_url=%2Forder%2Fdetail%3Fid%3D123
响应拦截器管不了用户手动输入 URL 或刷新页面。此时需在 router.beforeEach 中补全校验:
loginTime + expiresIn 或 expireTime)/login、/register 等免鉴权页,直接重定向到登录页并传参TokenManager.isExpired())比对毫秒级时间戳,避免字符串格式化误差/login?from_url=xxx;未过期 → next()
登录成功后不能无脑跳首页,否则用户体验断裂。应主动解析跳转参数:
from_url,做白名单校验(如 startsWith('/') 且不在黑名单中)router.push({ path: from_url }) 导航,非法则降级至默认页(如 /dashboard)from_url 参数,避免后续路由守卫重复触发重定向if (to.name === 'Login') { next(); return; },防止死循环不处理好这些,轻则白屏卡顿,重则无限跳转或安全泄漏:
Date.now() 对比 expireTime,禁用 toLocaleString() 等字符串操作isRefreshing = true,避免重复跳转登录页