Vue 3 中响应拦截器怎么在后台静默刷新过期的 Token

秋伟酱_7424

秋伟酱_7424

2026-10-17

454人浏览

原创

vue 3 中响应拦截器实现后台静默刷新 token 的关键是提前预判过期、并发控制与请求队列重放:请求前解析 access token 的 exp 字段,剩余不足60秒即触发不阻塞的刷新流程,用 promise 缓存防重复,401 时兜底重放请求,并将 refresh token 存于 httponly cookie 中保障安全。

vue 3 中响应拦截器怎么在后台静默刷新过期的 token

Vue 3 中响应拦截器实现后台静默刷新 Token,核心不是等 401 才行动,而是提前预判 + 并发控制 + 请求队列重放。真正“无感”的关键,在于避免用户看到登录页、不中断操作、不重复刷新。

提前检查 Token 是否即将过期

不要等到后端返回 401 再处理——那时请求已失败,体验已中断。应在每次请求发出前,就用 jwt-decode 解析本地 Access Token 的 exp 字段,结合当前时间判断是否剩余不足 60 秒(可配置):

  • 若即将过期,立即触发刷新流程,但不阻塞当前请求
  • 原请求暂存,等待新 Token 到位后自动重发
  • 刷新请求本身走独立路径(如不带 Authorization 头),避免被拦截器二次拦截

用 Promise 缓存 + 请求队列防重复刷新

多个请求几乎同时发现 Token 将过期时,必须确保只发起一次刷新请求。常用做法是用一个全局 Promise 变量缓存刷新任务:

Openclaw Token Memory Optimizer
Openclaw Token Memory Optimizer

{"answer":"OpenClaw Agent 优化套件,防止令牌泄露与上下文膨胀。适用于需实现后台任务隔离或重置与摘要工作流(RAG)的场景。"}

下载
  • 首次检测到需刷新 → 调用 refreshToken(),将返回的 Promise 存入变量(如 refreshPromise)
  • 后续请求检测到 refreshPromise 正在进行 → 直接 await refreshPromise,复用同一结果
  • 刷新成功后清空该变量;失败则重置,避免卡死

响应拦截器中接管 401 并重放原始请求

尽管做了提前检查,仍可能因网络延迟、时钟偏差或并发竞争导致某次请求携带了已过期 Token 并收到 401。此时响应拦截器要兜底:

  • 判断 error.response.status === 401 且 !originalRequest._retry
  • 标记 originalRequest._retry = true,防止循环重试
  • 调用刷新逻辑(复用上面的缓存 Promise)
  • 拿到新 Token 后,更新请求头:originalRequest.headers.Authorization = 'Bearer ' + newToken
  • 用 axios 重新发起 originalRequest,并返回其 Promise,让业务层无感知

Refresh Token 安全存储与失效兜底

Refresh Token 不应存在 localStorage(易被 XSS 窃取),推荐 HttpOnly Cookie 方式由后端下发。前端只需在刷新接口调用时让浏览器自动携带即可:

  • 刷新接口(如 /api/refresh-token)必须允许凭 Cookie 验证身份,不依赖前端传参
  • 若刷新失败且响应为 403,说明 Refresh Token 也已过期或被撤销 → 清除所有凭证,跳转登录页
  • 清除动作包括:localStorage / sessionStorage 中的 token、Pinia 持久化 store 数据、路由守卫状态

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vue.js vue token vue 3

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

3443

4

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

2023.11.14

874

3

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2024.03.12

6466

8

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5430

6

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

2026.05.08

481

31

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

1674

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

12102

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

316

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习