Loading...
Loading...
Nuxt 3 auth patterns with @clerk/nuxt - middleware, composables, server API routes, SSR. Triggers on: Nuxt auth, useAuth composable, clerkMiddleware Nuxt, server API Clerk, Nuxt route protection.
npx skill4agent add clerk/skills clerk-nuxt-patterns| 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 |
| Reference | Description |
|---|---|
| Route protection, clerkMiddleware() |
| Nitro server route auth |
| useAuth, useUser, useClerk |
| SSR hydration, server vs client |
npm install @clerk/nuxt.envNUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...nuxt.config.tsexport default defineNuxtConfig({
modules: ['@clerk/nuxt'],
})@clerk/nuxt<script setup>useAuthuseUser<script setup>clerkClientevent.context.authclerkMiddlewareauth().protect()<!-- 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
| 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 |
<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-setupclerk-custom-uiclerk-orgs