JWT 访问
获取当前用户的(解码后的)JWT令牌可能很有帮助,例如,使用它来访问需要此令牌进行身份验证或授权的外部API。
您可以使用 getToken
获取随请求一起传递的 JWT 令牌
ts
// file: ~/server/api/token.get.ts
import { getToken } from '#auth'
export default eventHandler(async (event) => {
const token = await getToken({ event })
return token || 'no token present'
})
此函数的行为与 getToken
函数从 NextAuth.js 完全相同,但有一个变化:您必须传入 h3-event
而不是 req
。这是因为在 h3 上访问 Cookie 的方式:不是通过 req.cookies
而是通过 useCookies(event)
。
您无需传入任何其他参数,例如 secret
, secureCookie
, ...。如果未设置,它们会自动推断为您配置的值,并且令牌读取将开箱即用。您可以传递这些选项,例如,要获取原始的、编码的 JWT 令牌,您可以传递 raw: true
。
应用侧 JWT 令牌访问
要在应用侧(例如,在 .vue
页面中)访问 JWT 令牌,您可以选择
- 创建一个 API 端点以返回解码后的 JWT 令牌
- 修改 NuxtAuthHandler 中的
jwt
回调以将令牌数据注入到应用侧会话中。在此处阅读更多信息 here
通过 API 端点访问 JWT 令牌
要通过 API 端点访问 JWT 令牌,您首先需要创建一个新的服务端路由,该路由可以处理 JWT 令牌的请求。
ts
// file: ~/server/api/token.get.ts
import { getToken } from '#auth'
export default eventHandler(event => getToken({ event }))
然后从您的应用侧代码,您可以像这样获取它
vue
<script setup lang="ts">
const headers = useRequestHeaders(['cookie']) as HeadersInit
const { data: token } = await useFetch('/api/token', { headers })
</script>
<template>
<div>{{ token || 'no token present, are you logged in?' }}</div>
</template>
注意
为了使此功能正常工作,您需要使用 useRequestHeaders
手动传递 cookie-header,以便在此页面在通用渲染过程中在服务端渲染时,Cookie 也能被正确传递。