clerk-astro-patterns

от clerk

Шаблоны Astro с Clerk — middleware, SSR-страницы, компоненты-острова

npx skills add https://github.com/clerk/skills --skill clerk-astro-patterns

Astro Patterns

SDK: @clerk/astro v3+. Requires Astro 4.15+.

What Do You Need?

TaskReference
Configure middlewarereferences/middleware.md
Protect SSR pagesreferences/ssr-pages.md
Use Clerk in island componentsreferences/island-components.md
Auth in API routesreferences/api-routes.md
Use Clerk with React in Astroreferences/astro-react.md

Mental Model

Astro has two rendering modes per page: SSR and static prerender. Clerk works differently in each:

  • SSR pages — use Astro.locals.auth() which is populated by the middleware
  • Static pages (export const prerender = true) — Clerk middleware skips them; use client-side hooks in islands
  • Islands — React/Vue/Svelte components; use useAuth() and other hooks from @clerk/astro/react
Request → clerkMiddleware() → SSR page → Astro.locals.auth()
                                ↓
                         Island (.client) → useAuth() hook

Setup

astro.config.mjs

import { defineConfig } from 'astro/config'
import clerk from '@clerk/astro'

export default defineConfig({
  integrations: [clerk()],
  output: 'server',
})

src/middleware.ts

import { clerkMiddleware, createRouteMatcher } from '@clerk/astro/server'

const isProtectedRoute = createRouteMatcher(['/dashboard(.*)'])

export const onRequest = clerkMiddleware((auth, context, next) => {
  if (isProtectedRoute(context.request) && !auth().userId) {
    return auth().redirectToSignIn()
  }
  return next()
})

SSR Page Auth

---
const { userId, orgId } = Astro.locals.auth()
if (!userId) return Astro.redirect('/sign-in')
---

<h1>Dashboard</h1>

Common Pitfalls

SymptomCauseFix
Astro.locals.auth is undefinedMissing middlewareAdd clerkMiddleware to src/middleware.ts
Auth works in dev but not productionoutput: 'static' globallySet output: 'server' or hybrid for protected pages
Static page has no authPrerendered pages skip middlewareUse export const prerender = false or move to island
Island not reactive to sign-inMissing client:load directiveAdd client:load to the island component

Import Map

WhatImport From
clerkMiddleware, createRouteMatcher@clerk/astro/server
useAuth, useUser, UserButton@clerk/astro/react
Astro components (<SignIn>, etc.)@clerk/astro/components

Env Variables

# .env
PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...

Astro uses PUBLIC_ prefix for client-exposed variables (not NEXT_PUBLIC_).

See Also

  • clerk-setup - Initial Clerk install
  • clerk-custom-ui - Custom flows & appearance
  • clerk-orgs - B2B organizations

Docs

Astro SDK

Больше skills от clerk

mosaic
clerk
Work on Mosaic UI: styling a component with slot recipes (`defineSlotRecipe` / `useRecipe` / slots / variants), or building a flow — authoring a state machine…
clerk-billing
clerk
Clerk Billing для управления подписками — отображение PricingTable от Clerk
clerk-nextjs-patterns
clerk
Расширенные паттерны Next.js для аутентификации, middleware, серверных действий и пользовательского кэширования с Clerk. Различает серверный await auth() и клиентский хук useAuth(); их смешивание — частая критическая ошибка. Охватывает стратегии middleware (сначала публичные или сначала защищённые), защиту маршрутов API и правильные HTTP-статус-коды (401 vs 403). Включает паттерны пользовательского кэширования с unstable_cache и защиту серверных действий от несанкционированных мутаций. Обеспечивает совместимость с Core 2...
clerk-expo-patterns
clerk
Шаблоны Expo / React Native с Clerk — кэш токенов SecureStore, OAuth
changesets
clerk
Create or refresh a `.changeset/<slug>.md` for the current branch, or report that none is required. Triggers on "/changesets create", "add a changeset",…
clerk
clerk
Бинарный файл clerk — это предварительно аутентифицированный шлюз к Backend API и Platform API Clerk, а также к инструментам уровня проекта (аутентификация, связывание, получение переменных окружения, конфигурация экземпляра). Когда пользователь запрашивает что-либо, связанное с ресурсами Clerk, сначала используйте clerk вместо написания curl вручную.
clerk-cli
clerk
Бинарный файл clerk — это предварительно аутентифицированный шлюз к Backend API и Platform API Clerk, а также инструментарий на уровне проекта (аутентификация, связывание, извлечение переменных окружения, конфигурация экземпляра). Когда пользователь запрашивает что-либо, связанное с ресурсами Clerk, сначала используйте clerk вместо ручного написания curl.
audit-expo-skill
clerk
Audits the bundled `clerk-expo` skill against the @clerk/expo SDK source and clerk-docs, then proposes or applies updates. Use when the user says "audit the…