讲师中心 微信公众号
AI工具推荐 视频效率加速

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

秋伟酱_7424

秋伟酱_7424

发布时间:2026-10-17 09:16:47

|

454人浏览过

|

来源于php中文网

原创

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 数据、路由守卫状态

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

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

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

3423

2023.11.09

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

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

874

2023.11.14

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

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

6446

2024.03.12

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

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

5410

2024.08.16

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

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

481

2026.05.08

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

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

1674

2023.07.17

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

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

12082

2024.02.23

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

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

316

2026.02.10

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

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

精品课程

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

共42课时 | 17.1万人学习

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

共12课时 | 1.4万人学习

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

共18课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn