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/10/3 17:27:28 阅读更多 →
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:28 阅读更多 →
GDPU|算法分析与设计 实验八 N皇后问题

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

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

2026/10/3 17:27:27 阅读更多 →

最新新闻

2026年企业内容获客必备:国内正规GEO优化软件得客GEO实战评测与TaoToken配置指南

2026年企业内容获客必备:国内正规GEO优化软件得客GEO实战评测与TaoToken配置指南

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

2026/10/4 20:50:49 阅读更多 →
JAX与EvoRL安装完整指南:从环境配置到踩坑解决方案

JAX与EvoRL安装完整指南:从环境配置到踩坑解决方案

搞了几次深度学习环境,PyTorch那套早就熟得不能再熟了,但一碰到JAX相关的项目,尤其是进化强化学习(Evolutionary Reinforcement Learning)这块,还是经常会看到有人在群里问“怎么装啊”“报错一堆怎么办”。…

2026/10/4 20:50:49 阅读更多 →
OpenClaw 断连 1006 无原因?把 endpoint 改到 TaoToken 排查

OpenClaw 断连 1006 无原因?把 endpoint 改到 TaoToken 排查

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

2026/10/4 20:50:47 阅读更多 →
Claude Code上手案例:三分钟用TaoToken跑通博客系统

Claude Code上手案例:三分钟用TaoToken跑通博客系统

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

2026/10/4 20:50:32 阅读更多 →
香港条形码注册全流程解析:帮码国际详解GS1 Hong Kong申请要点与489前缀规则

香港条形码注册全流程解析:帮码国际详解GS1 Hong Kong申请要点与489前缀规则

香港条形码注册全流程解析:帮码国际详解GS1 Hong Kong申请要点与489前缀规则 【快讯】随着跨境电商与国际贸易持续升温,越来越多的企业开始关注商品条形码的合规注册问题。近日,围绕香港条形码注册流程与申请要求的咨询量显著上升&#xff0c…

2026/10/4 20:45:16 阅读更多 →
Claude Code 自主记忆系统深度解析:短期记忆 + 长期记忆的工程化落地

Claude Code 自主记忆系统深度解析:短期记忆 + 长期记忆的工程化落地

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

2026/10/4 20:45:15 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/4 20:14:29 阅读更多 →