mcpField
C
create-auth-skill

create-auth-skill

github.com/panaversityセキュリティ44 回インストール
リポジトリ

create-auth-skill について

Create Auth Skill は、TypeScript および JavaScript アプリに Better Auth を導入するための設定ガイドです。設定、ルートハンドラー、データベース移行、クライアント構成、各種フレームワークのセキュリティ確認を扱います。

主な機能

  1. 01プロジェクト構成の判断手順
  2. 02サーバーとクライアントの設定ガイド
  3. 03フレームワーク別ルートハンドラー例
  4. 04データベースアダプターと移行手順
  5. 05認証セキュリティのチェックリスト

活用シーン

  1. 01新しいアプリへの Better Auth 導入
  2. 02フレームワークのサインインルート設定
  3. 03データベーススキーマとアダプターの設定
  4. 04リリース前の認証セキュリティ確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/panaversity/agentfactory --skill create-auth-skill

インストール後、Claude Code で/create-auth-skillを入力して読み込まれたか確認します。

詳細

認証スキルの作成

Better Auth を使用して TypeScript/JavaScript アプリケーションに認証を追加するためのガイドです。

コード例と構文については、better-auth.com/docs をご覧ください。


意思決定ツリー

Is this a new/empty project?
├─ YES → New project setup
│   1. Identify framework
│   2. Choose database
│   3. Install better-auth
│   4. Create auth.ts + auth-client.ts
│   5. Set up route handler
│   6. Run CLI migrate/generate
│   7. Add features via plugins
│
└─ NO → Does project have existing auth?
    ├─ YES → Migration/enhancement
    │   • Audit current auth for gaps
    │   • Plan incremental migration
    │   • See migration guides in docs
    │
    └─ NO → Add auth to existing project
        1. Analyze project structure
        2. Install better-auth
        3. Create auth config
        4. Add route handler
        5. Run schema migrations
        6. Integrate into existing pages

インストール

コア: npm install better-auth

スコープ付きパッケージ(必要に応じて):

パッケージ使用例
@better-auth/passkeyWebAuthn/Passkey 認証
@better-auth/ssoSAML/OIDC エンタープライズ SSO
@better-auth/stripeStripe 決済
@better-auth/scimSCIM ユーザープロビジョニング
@better-auth/expoReact Native/Expo

環境変数

BETTER_AUTH_SECRET=<32+ chars, generate with: openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL=<your database connection string>

必要に応じて OAuth シークレットを追加します:GITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET、GOOGLE_CLIENT_ID など。


サーバー設定(auth.ts)

配置場所: lib/auth.ts または src/lib/auth.ts

最小限の設定項目:

  • database - 接続またはアダプター
  • emailAndPassword: { enabled: true } - メールアドレス/パスワード認証用

標準設定で追加される項目:

  • socialProviders - OAuth プロバイダー(google、github など)
  • emailVerification.sendVerificationEmail - メール認証ハンドラー
  • emailAndPassword.sendResetPassword - パスワードリセットハンドラー

完全な設定で追加される項目:

  • plugins - 機能プラグインの配列
  • session - 有効期限、Cookie キャッシュの設定
  • account.accountLinking - 複数プロバイダーの連携
  • rateLimit - レート制限の設定

型をエクスポート: export type Session = typeof auth.$Infer.Session


クライアント設定(auth-client.ts)

フレームワーク別のインポート:

フレームワークインポート
React/Next.jsbetter-auth/react
Vuebetter-auth/vue
Sveltebetter-auth/svelte
Solidbetter-auth/solid
Vanilla JSbetter-auth/client

クライアントプラグインは createAuthClient({ plugins: [...] }) に指定します。

一般的なエクスポート: signIn、signUp、signOut、useSession、getSession


ルートハンドラーの設定

フレームワークファイルハンドラー
Next.js App Routerapp/api/auth/[...all]/route.tstoNextJsHandler(auth) → { GET, POST } をエクスポート
Next.js Pagespages/api/auth/[...all].tstoNextJsHandler(auth) → デフォルトエクスポート
Express任意のファイルapp.all("/api/auth/*", toNodeHandler(auth))
SvelteKitsrc/hooks.server.tssvelteKitHandler(auth)
SolidStartルートファイルsolidStartHandler(auth)
Honoルートファイルauth.handler(c.req.raw)

Next.js Server Components: auth 設定に nextCookies() プラグインを追加します。


データベースのマイグレーション

アダプターコマンド
組み込みの Kyselynpx @better-auth/cli@latest migrate(直接適用)
Prismanpx @better-auth/cli@latest generate --output prisma/schema.prisma の後に npx prisma migrate dev
Drizzlenpx @better-auth/cli@latest generate --output src/db/auth-schema.ts の後に npx drizzle-kit push

プラグインを追加した後は、再実行してください。


データベースアダプター

データベース設定
SQLitebetter-sqlite3 または bun:sqlite のインスタンスを直接渡します
PostgreSQLpg.Pool のインスタンスを直接渡します
MySQLmysql2 のプールを直接渡します
Prismabetter-auth/adapters/prisma の prismaAdapter(prisma, { provider: "postgresql" })
Drizzlebetter-auth/adapters/drizzle の drizzleAdapter(db, { provider: "pg" })
MongoDBbetter-auth/adapters/mongodb の mongodbAdapter(db)

一般的なプラグイン

プラグインサーバーのインポートクライアントのインポート用途
twoFactorbetter-auth/pluginstwoFactorClientTOTP/OTP による 2 要素認証
organizationbetter-auth/pluginsorganizationClientチーム/組織
adminbetter-auth/pluginsadminClientユーザー管理
bearerbetter-auth/plugins-API トークン認証
openAPIbetter-auth/plugins-API ドキュメント
passkey@better-auth/passkeypasskeyClientWebAuthn
sso@better-auth/sso-エンタープライズ SSO

プラグインのパターン: サーバープラグインとクライアントプラグインを追加し、マイグレーションを実行します。


認証 UI の実装

サインインのフロー:

  1. signIn.email({ email, password }) または signIn.social({ provider, callbackURL }) を実行します
  2. レスポンスの error を処理します
  3. 成功したらリダイレクトします

セッションの確認(クライアント): useSession() フックは { data: session, isPending } を返します

セッションの確認(サーバー): auth.api.getSession({ headers: await headers() })

保護されたルート: セッションを確認し、null の場合は /sign-in にリダイレクトします。


セキュリティチェックリスト

  • BETTER_AUTH_SECRET が設定されている(32 文字以上)
  • 本番環境で advanced.useSecureCookies: true が設定されている
  • trustedOrigins が設定されている
  • レート制限が有効になっている
  • メール認証が有効になっている
  • パスワードリセットが実装されている
  • 機密性の高いアプリでは 2 要素認証を使用している
  • CSRF 保護が無効化されていない
  • account.accountLinking を確認している

トラブルシューティング

問題解決方法
"Secret not set"BETTER_AUTH_SECRET 環境変数を追加します
"Invalid Origin"ドメインを trustedOrigins に追加します
Cookie が設定されないbaseURL がドメインと一致しているか確認し、本番環境でセキュア Cookie を有効にします
OAuth コールバックエラープロバイダーダッシュボードでリダイレクト URI を確認します
プラグイン追加後の型エラーCLI の generate/migrate を再実行します

リソース

コメント