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),仅供参考

相关新闻

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/11/4 2:16:47 阅读更多 →
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/11/4 2:53:44 阅读更多 →
GDPU|算法分析与设计 实验八 N皇后问题

GDPU|算法分析与设计 实验八 N皇后问题

一、【实验目的】(1)熟悉回溯法的设计步骤(2)理解搜索策略与搜索空间(3)掌握N皇后问题的解决方法。二、【实验内容】以4皇后为例进行程序设计,即在4x4的棋盘上放置4个皇后,任意2个之…

2026/11/4 2:52:04 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/5 1:08:50 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/5 0:54:28 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/4 19:19:54 阅读更多 →

日新闻

周新闻

月新闻