C
clerk-astro-patterns
by @clerkv
4.5(120)
このスキルは、AstroアプリケーションにClerk認証を統合するためのベストプラクティスとパターンを提供します。ミドルウェア、SSRページ、アイランドコンポーネントでの認証実装を網羅し、さまざまなレンダリングモードで安全かつシームレスなユーザー認証を保証します。開発者は堅牢な認証ソリューションを迅速に構築でき、Astroプロジェクトのアプリケーションセキュリティとユーザー管理を向上させます。
インストール方法
npx skills add https://github.com/clerk/skills --skill clerk-astro-patternscompare_arrows
Before / After 効果比較
1 组使用前
開発環境ではClerk認証が正常に機能するものの、本番環境にデプロイするとユーザー認証が失敗し、保護されたページにアクセスできなくなる。これにより、設定問題のデバッグに多大な時間を費やすことになり、通常数時間かかります。
使用後
Clerk Astroパターンに従い、`output: 'server'`または`hybrid`を明示的に設定することで、本番環境のSSRページが認証ロジックを正しく処理します。これにより、認証問題のデバッグ時間が数時間から数分に短縮され、デプロイ効率が大幅に向上します。
SKILL.md
Astro Patterns
SDK: @clerk/astro v3+. Requires Astro 4.15+.
What Do You Need?
| Task | Reference |
|---|---|
| Configure middleware | references/middleware.md |
| Protect SSR pages | references/ssr-pages.md |
| Use Clerk in island components | references/island-components.md |
| Auth in API routes | references/api-routes.md |
| Use Clerk with React in Astro | references/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
| Symptom | Cause | Fix |
|---|---|---|
Astro.locals.auth is undefined | Missing middleware | Add clerkMiddleware to src/middleware.ts |
| Auth works in dev but not production | output: 'static' globally | Set output: 'server' or hybrid for protected pages |
| Static page has no auth | Prerendered pages skip middleware | Use export const prerender = false or move to island |
| Island not reactive to sign-in | Missing client:load directive | Add client:load to the island component |
Import Map
| What | Import 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 installclerk-custom-ui- Custom flows & appearanceclerk-orgs- B2B organizations
Docs
ユーザーレビュー (0)
レビューを書く
効果
使いやすさ
ドキュメント
互換性
レビューなし
統計データ
インストール数14.2K
評価4.5 / 5.0
バージョン
更新日2026年10月22日
比較事例1 件
ユーザー評価
4.5(120)
5
37%
4
43%
3
13%
2
5%
1
2%
この Skill を評価
0.0
対応プラットフォーム
🤖claude-code
タイムライン
作成2026年5月28日
最終更新2026年10月22日