我认为使用用户案例的最佳方法是与服务器插件结合使用组合来管理用户状态。这是一个例子:
composables/useauth.ts
interface User {
// define the shape you expect from the token
sub: string
email?: string
}
export const useAuth = () => {
// Create a global state named 'user'.
// Nuxt automatically serializes this state from SSR to client.
return useState<User | null>('user', () => null)
}
Plugins/auth.server.ts
import { parse } from 'some-jwt-library'
import { getHeader } from 'h3' // <-- make sure to import from h3
import type {User} from "~/composables/useAuth"; // or from '#imports'
export default defineNuxtPlugin((nuxtApp) => {
const event = useRequestEvent()
const token = getHeader(event, 'Authorization')
if (!token) return
const user = useState('user', () => null)
// parse token...
user.value = parse(token)
})
然后在您的.vue文件中您可以这样使用:app.vue
<script setup lang="ts">
const user = useAuth()
</script>
<template>
<div>
Hello: {{ user }}
</div>
</template>