关于 clerk-nuxt-patterns
面向 Nuxt 开发者的 Clerk 认证模式技能,涵盖路由保护、Nitro 服务端 API、组合式函数和 SSR 认证处理。
主要功能
- 01Nuxt 认证中间件模式
- 02Nitro 路由认证
- 03认证组合式函数用法
- 04SSR 水合处理
- 05组织角色模式
适用场景
- 01为页面添加登录保护
- 02在 Nitro API 路由检查身份
- 03在组件中读取用户状态
- 04处理 SSR 认证状态水合
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ clerk/ skills --skill clerk-nuxt-patterns安装后在 Claude Code 中输入/clerk-nuxt-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/composables.mdnuxt-middleware.mdserver-api-routes.mdssr-auth.mdtemplates/nuxt-basic-auth/app.vuenuxt.config.tspackage.json详细介绍
Nuxt 模式
你需要什么?
| 任务 | 参考 |
|---|---|
| 使用中间件保护路由 | references/nuxt-middleware.md |
| 在服务器 API 路由中进行身份验证(Nitro) | references/server-api-routes.md |
| 在组件中使用 useAuth / useUser | references/composables.md |
| SSR 安全的身份验证模式 | references/ssr-auth.md |
参考
| 参考 | 描述 |
|---|---|
references/nuxt-middleware.md | 路由保护,clerkMiddleware() |
references/server-api-routes.md | Nitro 服务器路由身份验证 |
references/composables.md | useAuth、useUser、useClerk |
references/ssr-auth.md | SSR 水合、服务器端与客户端 |
设置
npm install @clerk/nuxt
.env:
NUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...
nuxt.config.ts:
export default defineNuxtConfig({
modules: ['@clerk/nuxt'],
})
这一行会自动配置中间件、插件和组件自动导入。
心智模型
@clerk/nuxt 会自动导入所有 Clerk 组件和组合式函数——无需在 <script setup> 中显式导入。
- 组合式函数(
useAuth、useUser)——客户端响应式,仅在<script setup>中使用 - 服务器路由(
clerkClient)——Nitro 服务器路由,event.context.auth - 中间件(
clerkMiddleware)——自动注册,使用auth().protect()锁定路由
最简模式
<script setup lang="ts">
definePageMeta({ middleware: 'auth' })
const { userId } = useAuth()
</script>
<template>
<Show when="signed-in">
<p>Hello {{ userId }}</p>
</Show>
</template>
definePageMeta({ middleware: 'auth' })使用@clerk/nuxt内置的身份验证中间件。
常见问题
| 现象 | 原因 | 解决方法 |
|---|---|---|
组合式函数在服务器上返回 undefined | useAuth 仅适用于客户端 | 在服务器路由中使用 event.context.auth |
| 路由未受保护 | 缺少 middleware: 'auth' 元信息 | 添加 definePageMeta({ middleware: 'auth' }) |
clerkClient 不可用 | 导入路径错误 | 从 @clerk/nuxt/server 导入 |
| 水合不匹配 | 在挂载前渲染身份验证状态 | 使用 <ClientOnly> 包裹,或检查 isLoaded |
| 未读取环境变量 | 前缀错误 | Nuxt 要求公共变量使用 NUXT_PUBLIC_,服务器变量使用 NUXT_ |
组织感知模式
<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>
另请参阅
clerk-setup- Clerk 初始安装clerk-custom-ui- 自定义流程与外观clerk-orgs- B2B 组织
文档
评论
支持 Markdown