clerk-nuxt-patterns
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseNuxt Patterns
Nuxt 认证模式
What Do You Need?
你需要实现什么功能?
| Task | Reference |
|---|---|
| Protect routes with middleware | references/nuxt-middleware.md |
| Auth in server API routes (Nitro) | references/server-api-routes.md |
| useAuth / useUser in components | references/composables.md |
| SSR-safe auth patterns | references/ssr-auth.md |
| 任务 | 参考文档 |
|---|---|
| 通过中间件保护路由 | references/nuxt-middleware.md |
| 服务端API路由(Nitro)身份认证 | references/server-api-routes.md |
| 在组件中使用useAuth / useUser | references/composables.md |
| SSR安全的身份认证模式 | references/ssr-auth.md |
References
参考列表
| Reference | Description |
|---|---|
| Route protection, clerkMiddleware() |
| Nitro server route auth |
| useAuth, useUser, useClerk |
| SSR hydration, server vs client |
| 参考文档 | 说明 |
|---|---|
| 路由保护、clerkMiddleware() |
| Nitro服务端路由认证 |
| useAuth、useUser、useClerk |
| SSR水合、服务端 vs 客户端差异 |
Setup
安装配置
npm install @clerk/nuxt.envNUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...nuxt.config.tstypescript
export default defineNuxtConfig({
modules: ['@clerk/nuxt'],
})This single line auto-configures middleware, plugins, and component auto-imports.
npm install @clerk/nuxt.envNUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...nuxt.config.tstypescript
export default defineNuxtConfig({
modules: ['@clerk/nuxt'],
})这一行代码会自动配置中间件、插件以及组件自动导入能力。
Mental Model
核心逻辑模型
@clerk/nuxt<script setup>- Composables (,
useAuth) — client-side reactive, insideuseUser<script setup> - Server routes () — Nitro server routes,
clerkClientevent.context.auth - Middleware () — auto-registered, use
clerkMiddlewareto lock routesauth().protect()
@clerk/nuxt<script setup>- Composables(、
useAuth)—— 客户端响应式能力,在useUser中使用<script setup> - 服务端路由()—— 适用于Nitro服务端路由,通过
clerkClient获取认证信息event.context.auth - 中间件()—— 自动注册,可使用
clerkMiddleware锁定路由访问权限auth().protect()
Minimal Pattern
最简实现模式
vue
<!-- pages/dashboard.vue -->
<script setup lang="ts">
definePageMeta({ middleware: 'auth' })
const { userId } = useAuth()
</script>
<template>
<Show when="signed-in">
<p>Hello {{ userId }}</p>
</Show>
</template>uses the built-in auth middleware fromdefinePageMeta({ middleware: 'auth' }).@clerk/nuxt
vue
<!-- pages/dashboard.vue -->
<script setup lang="ts">
definePageMeta({ middleware: 'auth' })
const { userId } = useAuth()
</script>
<template>
<Show when="signed-in">
<p>你好 {{ userId }}</p>
</Show>
</template>使用的是definePageMeta({ middleware: 'auth' })内置的身份认证中间件。@clerk/nuxt
Common Pitfalls
常见问题排查
| Symptom | Cause | Fix |
|---|---|---|
Composables return | useAuth is client-only | Use |
| Route not protected | Missing | Add |
| Wrong import path | Import from |
| Hydration mismatch | Rendering auth state before mounted | Wrap in |
| Env vars not picked up | Wrong prefix | Nuxt requires |
| 现象 | 原因 | 解决方案 |
|---|---|---|
Composables在服务端返回 | useAuth仅支持客户端 | 在服务端路由中使用 |
| 路由未被保护 | 缺少 | 添加 |
| 导入路径错误 | 从 |
| 水合不匹配 | 组件挂载前就渲染了认证状态 | 用 |
| 环境变量未被识别 | 前缀错误 | Nuxt要求公开环境变量前缀为 |
Org-Aware Pattern
组织权限适配模式
vue
<script setup lang="ts">
const { orgId, orgRole } = useAuth()
</script>
<template>
<div v-if="orgId">
<p>Org: {{ orgId }}</p>
<p v-if="orgRole === 'org:admin'">Admin panel</p>
</div>
<div v-else>
<OrganizationSwitcher />
</div>
</template>vue
<script setup lang="ts">
const { orgId, orgRole } = useAuth()
</script>
<template>
<div v-if="orgId">
<p>组织ID:{{ orgId }}</p>
<p v-if="orgRole === 'org:admin'">管理面板</p>
</div>
<div v-else>
<OrganizationSwitcher />
</div>
</template>See Also
相关参考
- - Initial Clerk install
clerk-setup - - Custom flows & appearance
clerk-custom-ui - - B2B organizations
clerk-orgs
- - Clerk初始安装
clerk-setup - - 自定义流程与样式
clerk-custom-ui - - B2B组织能力
clerk-orgs