C
clerk-nuxt-patterns
by @clerkv
4.5(120)
此技能提供将 Clerk 认证集成到 Nuxt 3 应用的最佳实践和模式。它涵盖了使用中间件进行路由保护、在 Nitro 服务器 API 路由中处理认证,以及利用 `useAuth`/`useUser` 组合式函数实现客户端响应式体验。通过提供 SSR 安全的认证策略,它简化了安全且高性能 Nuxt 应用的开发,减少了常见陷阱并加速了上市时间。
安装方式
npx skills add https://github.com/clerk/skills --skill clerk-nuxt-patternscompare_arrows
Before / After 效果对比
1 组使用前
在 Nuxt 3 应用中手动实现认证功能,特别是要兼顾 SSR 安全性和客户端状态管理时,过程复杂且容易出错,耗时较长。
使用后
采用 Clerk Nuxt 认证模式,通过预置的中间件、组合式函数和服务器路由处理,显著简化了认证集成,确保了安全性和开发效率。
SKILL.md
Nuxt Patterns
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
| Reference | Description |
|---|---|
references/nuxt-middleware.md | Route protection, clerkMiddleware() |
references/server-api-routes.md | Nitro server route auth |
references/composables.md | useAuth, useUser, useClerk |
references/ssr-auth.md | SSR hydration, server vs client |
Setup
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'],
})
This single line auto-configures middleware, plugins, and component auto-imports.
Mental Model
@clerk/nuxt auto-imports all Clerk components and composables — no explicit imports needed in <script setup>.
- Composables (
useAuth,useUser) — client-side reactive, inside<script setup> - Server routes (
clerkClient) — Nitro server routes,event.context.auth - Middleware (
clerkMiddleware) — auto-registered, useauth().protect()to lock routes
Minimal Pattern
<!-- 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>
definePageMeta({ middleware: 'auth' })uses the built-in auth middleware from@clerk/nuxt.
Common Pitfalls
| Symptom | Cause | Fix |
|---|---|---|
Composables return undefined on server | useAuth is client-only | Use event.context.auth in server routes |
| Route not protected | Missing middleware: 'auth' meta | Add definePageMeta({ middleware: 'auth' }) |
clerkClient not available | Wrong import path | Import from @clerk/nuxt/server |
| Hydration mismatch | Rendering auth state before mounted | Wrap in <ClientOnly> or check isLoaded |
| Env vars not picked up | Wrong prefix | Nuxt requires NUXT_PUBLIC_ for public, NUXT_ for server |
Org-Aware Pattern
<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>
See Also
clerk-setup- Initial Clerk installclerk-custom-ui- Custom flows & appearanceclerk-orgs- B2B organizations
Docs
用户评价 (0)
发表评价
效果
易用性
文档
兼容性
暂无评价
统计数据
安装量13.8K
评分4.5 / 5.0
版本
更新日期2026年10月21日
对比案例1 组
用户评分
4.5(120)
5
37%
4
43%
3
13%
2
5%
1
2%
为此 Skill 评分
0.0
兼容平台
🤖claude-code
时间线
创建2026年5月28日
最后更新2026年10月21日