尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VueUse useJwt 响应式 JWT 解码指南:在 Vue 3 中优雅地解析 Token
前端【免费下载链接】vueuseCollection of essential Vue Composition Utilities for Vue 3项目地址https://gitcode.com/gh_mirrors/vu/vueuse点击查看免费下载导读useJwt是 VueUse Integrations 集合中用于**响应式解码 JWTJSON Web Token**的工具函数它是对jwt-decode库的一层薄封装。在 Vue 3 应用中无论 Token 来自登录响应、LocalStorage 还是状态管理你都可以把它放进ref让header与payload自动随之更新。读完本文你将掌握useJwt的安装方式、完整用法、选项配置、泛型类型定制、响应式原理以及容错机制并了解它在仓库源码与测试中的真实实现。安装与依赖要求useJwt本身位于vueuse/integrations包中同时以可选方式依赖jwt-decode。根据 packages/integrations/useJwt/index.md 中的说明需要单独安装jwt-decodenpm install jwt-decode^4在 packages/integrations/package.json 中jwt-decode被声明为可选 peer 依赖jwt-decode: ^4且peerDependenciesMeta.jwt-decode.optional为true这意味着只有当你实际使用useJwt时才需要安装它不影响其他集成函数。如果你使用 pnpm还可以通过pnpm add jwt-decode^4安装。基本用法按照官方文档最简单的用法是将编码后的 JWT 字符串放入ref解构出header与payloadimport { useJwt } from vueuse/integrations/useJwt import { ref } from vue const encodedJwt ref(eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyfQ.L8i6g3PfcHlioHCCPURC9pmXT7gdJpx3kOoyAfNUwCc) const { header, payload } useJwt(encodedJwt)这里传入的是jwt.io上经典的示例 Token解码后header.value{ alg: HS256, typ: JWT }payload.value{ sub: 1234567890, iat: 1516239022 }header与payload都是ComputedRef计算属性在模板中可以直接使用例如payload.value.sub。源码剖析useJwt 是如何工作的从源码 packages/integrations/useJwt/index.ts 可以看到useJwt的完整实现非常简洁核心是两层computed包住jwt-decode的解码函数import { jwtDecode } from jwt-decode import { computed, toValue } from vue const decodeWithFallback T extends object(encodedJwt: string, options?: JwtDecodeOptions): T | Fallback { try { return jwtDecodeT(encodedJwt, options) } catch (err) { onError?.(err) return fallbackValue as Fallback } } const header computed(() decodeWithFallbackHeader(toValue(encodedJwt), { header: true })) const payload computed(() decodeWithFallbackPayload(toValue(encodedJwt)))其中值得注意的三个实现细节toValue统一取值参数类型为MaybeRefOrGetterstring即普通字符串、ref或 getter 函数都可以传入toValue会在每次计算时取到最新值这是响应式的关键。header通过{ header: true }解码jwt-decode的JwtDecodeOptions.header选项让useJwt能把 Token 的 Header 段算法、类型等单独解码出来。错误兜底统一走decodeWithFallback解码失败时不会抛错而是触发onError回调并返回fallbackValue保证 UI 层始终能拿到稳定的值。此外在 packages/integrations/index.ts 中useJwt被统一 re-export因此你也可以直接import { useJwt } from vueuse/integrations。配置选项fallbackValue 与 onErroruseJwt接受第二个参数options类型为UseJwtOptionsFallback包含两个可选配置选项类型默认值作用fallbackValueFallbacknull解码遇到错误时返回的兜底值onError(error: unknown) void无解码失败时的错误回调接收原始异常例如想用空对象兜底并记录日志const { header, payload } useJwt(tokenRef, { fallbackValue: {}, onError: (err) console.warn(JWT 解码失败:, err), })测试用例 packages/integrations/useJwt/index.test.ts 验证了错误处理行为当传入bad-token时header.value与payload.value均为null且onError回调用vi.fn()监控会被调用说明解码失败时默认返回null并回调错误而不是抛出异常。泛型定制解码自定义字段JWT 的payload往往包含自定义 claim如name、role、foo等。useJwt支持通过泛型约束解码结果的类型且header与payload的类型可以分别指定interface CustomJwtHeader extends JwtHeader { foo: string } interface CustomJwtPayload extends JwtPayload { foo: string } const { header, payload } useJwtCustomJwtPayload, CustomJwtHeader(tokenRef) // header.value?.foo 与 payload.value?.foo 均获得类型提示默认泛型参数为Payload extends object JwtPayload、Header extends object JwtHeader、Fallback null其中JwtHeader、JwtPayload来自jwt-decode的内置类型定义。测试中通过传入带foo: bar自定义字段的 TokeneyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImZvbyI6ImJhciJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJmb28iOiJiYXIifQ.S5QwvREUfgEdpB1ljG_xN6NI3HubQ79xx6J1J4dsJmg断言header.value?.foo与payload.value?.foo均为bar验证了泛型解码的可行性。响应式更新机制useJwt的响应式能力由两个测试用例共同保障见 packages/integrations/useJwt/index.test.ts 的reactivity用例const jwt deepRef(encodedJwt.value) const { header, payload } useJwtCustomJwtPayload, CustomJwtHeader(jwt) // 初始 Token 无 foo 字段值为 undefined jwt.value encodedCustomJwt.value // 更换 Token 后header.value?.foo 与 payload.value?.foo 变为 bar也就是说只要传入的是ref或 getterToken 一变header与payload便自动重新解码。这与toValuecomputed的实现密不可分——计算属性会在依赖的响应式源变化时惰性重算。官方示例 packages/integrations/useJwt/demo.vue 中即用shallowRef持有 Token并将header、payload通过JSON.stringify(..., 2)渲染到页面上方便直观查看解码结果。在组件中实战登录态解析示例综合以上能力一个典型的应用场景是登录后把 Token 存入ref在页面中读取用户信息import { useJwt } from vueuse/integrations/useJwt import { shallowRef } from vue interface AuthPayload extends JwtPayload { sub: string name: string } // 假设来自登录接口或 localStorage const token shallowRef(localStorage.getItem(token) || ) const { header, payload } useJwtAuthPayload(token, { fallbackValue: { sub: , name: }, onError: () localStorage.removeItem(token), }) // 模板中{{ payload.name }}配套的demo.vue展示了同样思路的最小实现——持有 Token 的shallowRef加上useJwt的解构配合pre标签展示格式化后的 JSON。注意事项useJwt只负责解码不负责验签jwt-decode与useJwt都只做 base64 解码不校验签名签名验证应由后端完成如持有密钥的 Node.js 服务。版本匹配请使用jwt-decode^4与vueuse/integrations的 peer 依赖范围^4保持一致。导出路径可单独导入vueuse/integrations/useJwt也可以从vueuse/integrations整体导入见 packages/integrations/index.ts 的 re-export。解码失败不抛错默认返回null并回调onError需要区分未登录与Token 损坏场景时可通过fallbackValue提供语义化兜底值。总结useJwt以不足 60 行的源码见 packages/integrations/useJwt/index.ts把jwt-decode的静态解码升级为 Vue 3 响应式能力MaybeRefOrGetter入参、双computed输出、fallbackValue兜底、onError回调与泛型类型定制一应俱全并有完整的单元测试packages/integrations/useJwt/index.test.ts覆盖正常解码、错误兜底、自定义字段与响应式更新四条路径。对于需要在组件中即时展示用户信息、刷新 Token 后自动更新界面的场景它是一个开箱即用的轻量方案。赞分享前端【免费下载链接】vueuseCollection of essential Vue Composition Utilities for Vue 3项目地址https://gitcode.com/gh_mirrors/vu/vueuse点击查看免费下载相关推荐在 Vue 应用中响应式读取浏览器地址VueUse useBrowserLocation 全面解析在 Vue 应用中响应式读取浏览器地址VueUse useBrowserLocation 全面解析 useBrowserLocation 是 VueUse 提AI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染VueUse useUrlSearchParams 指南在 Vue 3 应用中响应式读写 URL 查询参数VueUse useUrlSearchParams 指南在 Vue 3 应用中响应式读写 URL 查询参数 导读 useUrlSearchParams 是 VAI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染VueUse useMutationObserver 完全指南在 Vue 3 中响应式监听 DOM 树变化VueUse useMutationObserver 完全指南在 Vue 3 中响应式监听 DOM 树变化 useMutationObserver 是 Vue前端上一篇impress.js Toolbar 插件完全指南统一图形工具栏的启用、样式定制与插件扩展下一篇curl 的 Rust Hyper 后端集成指南从构建配置到内部实现原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Bitnami Kafka Helm Chart 演进全解析:从 32.x 版本变更记录看生产级 Kafka 运维实践

Bitnami Kafka Helm Chart 演进全解析:从 32.x 版本变更记录看生产级 Kafka 运维实践

云原生容器编排 【免费下载链接】charts Bitnami Helm Charts 项目地址: https://gitcode.com/GitHub_Trending/charts30/charts 点击查看 免费下载 本篇技术指南以当前仓库 bitnami/kafka/CHANGELOG.md 为主线,结合 Chart.yaml、values.yaml 与 templa…

📅 2026/10/3 17:27:11
Warp 中 Mermaid 渲染失败显式 Callout 的设计与实现:从“永远转圈“到“明确报错“

Warp 中 Mermaid 渲染失败显式 Callout 的设计与实现:从“永远转圈“到“明确报错“

桌面应用开发者工具人工智能AI 应用AI Agent代码智能体 【免费下载链接】warp Warp is an agentic development environment, born out of the terminal. 项目地址: https://gitcode.com/GitHub_Trending/wa/warp 点击查看 免费下载 Mermaid 图表在 Warp 的 Markdo…

📅 2026/10/3 17:27:11
STM32 HardFault排查实战:从栈回溯到精准定位代码行

STM32 HardFault排查实战:从栈回溯到精准定位代码行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/3 17:22:11
MORE NEWS

更多资讯

📰

pigeon_generator 鸿蒙适配实战:Flutter 插件桥接层设计与迁移指南

从把 Flutter 插件往鸿蒙上迁移的那一周开始,我几乎每天都在跟桥接代码较劲。真正让我停下来重新想了三天的,就是 pigeon_generator——准确说,是“pigeon_generator 生成的桥接代码,到底能不能在鸿蒙上用”这件事。如果你也在做 …

📰

Python多模型对比:盾构滚刀状态识别实战

简介:这份资源面向机械加工与智能制造方向的本科生、研究生及算法入门者,提供一套基于机器学习的滚刀状态识别完整项目,可用于毕业设计、课程设计或期末大作业。项目以Python实现,覆盖CNN、LSTM、GRU、SVM、随机森林等多种模型&am…

📰

孪生自注意力网络高光谱变化检测Python源码实战

简介:本资源为基于孪生自注意力网络的高光谱图像变化检测系统,面向计算机、人工智能、通信、遥感等专业的在校学生、教师及企业研发人员,可用于课程设计、毕业设计、大作业或初期项目立项演示,帮助理解高光谱变化检测的模型搭建与…

📰

Scissor算法实战:用bulk表型精准锁定单细胞关键亚群

做单细胞数据分析的人,迟早会遇到一个绕不开的尴尬:聚类注释做得再漂亮,细胞亚群看得再清楚,合作方一句“哪些细胞跟患者生存或者用药响应最相关”,就能让你卡在当场。常规做法是拿细胞比例和分组做差异检验&#xff0…

📰

MySQL数据库基础:从索引原理到事务隔离与连接池排查实践

“MySQL 数据库基础”——每次有人在后台带着这个关键词进来,我都想认真聊几句。很多人觉得“基础”不过就是背几条SQL、会建库建表,我一开始也是这么过来的,后来才发现,真到了线上,一条慢查询、一次乱码、一个死锁&am…

📰

SPSS实战:多指标联合诊断ROC曲线分析,5步搞定Logistic回归

SPSS实战:5步搞定多指标联合诊断的ROC曲线分析(附Logistic回归教程)我经常被临床科室的同事拦住问一个问题:手上已经有两三个化验指标,单独做ROC曲线,AUC都只有0.7上下,有没有办法把它们合在一起…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬