登录态失效后页面开始疯狂重试,网络面板里 /auth/refresh 每秒出现几十次,次次都是 401,标签页风扇狂转,接口监控上的 QPS 直接翻了十倍。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,响应拦截器对所有 401 一律触发刷新,刷新接口自身返回的 401 又被同一段逻辑接住,既没有排除它自己,也没设重试上限,就成了停不下来的闭环。

「token 刷新死循环」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

axios.interceptors.response.use(null, (err) => {
  const url = err.config.url || '';
  if (url.includes('refresh')) return Promise.reject(err);
});

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,拦截器里先把刷新接口和白名单路径排除掉,别让它自己进循环;同一个页面只允许发起一次刷新,失败就立即跳转登录页;给重试次数设一个硬上限,超过上限直接停止请求。

最后用这个标准收尾,刷新失败后请求只发出一次,页面跳到登录页而不是继续空转。

作者 9823189