Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 60/100

create-auth-skill

Better Authを使用してTypeScript/JavaScriptアプリに認証レイヤーを作成するスキルです。

description の原文を見る

Skill for creating auth layers in TypeScript/JavaScript apps using Better Auth.

SKILL.md 本文

認証スキル

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

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


判断フロー

これは新規/空のプロジェクトですか?
├─ はい → 新規プロジェクトのセットアップ
│   1. フレームワークを特定する
│   2. データベースを選択する
│   3. better-auth をインストールする
│   4. auth.ts + auth-client.ts を作成する
│   5. ルートハンドラーをセットアップする
│   6. CLI migrate/generate を実行する
│   7. プラグインで機能を追加する
│
└─ いいえ → プロジェクトに既存の認証がありますか?
    ├─ はい → 移行/拡張
    │   • 現在の認証の不足部分を監査する
    │   • 段階的な移行を計画する
    │   • ドキュメント内の移行ガイドを参照する
    │
    └─ いいえ → 既存プロジェクトに認証を追加する
        1. プロジェクト構造を分析する
        2. better-auth をインストールする
        3. 認証設定を作成する
        4. ルートハンドラーを追加する
        5. スキーママイグレーションを実行する
        6. 既存ページに統合する

インストール

コア: 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文字以上、以下で生成: openssl rand -base64 32>
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL=<データベース接続文字列>

必要に応じて OAuth シークレットを追加します: GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETGOOGLE_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 - 有効期限、クッキーキャッシュ設定
  • 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: [...] }) に指定します。

一般的なエクスポート: signInsignUpsignOutuseSessiongetSession


ルートハンドラーのセットアップ

フレームワークファイルハンドラー
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 サーバーコンポーネント: 認証設定に 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 による 2FA
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 が設定されている
  • レート制限が有効
  • メール確認が有効
  • パスワードリセットが実装されている
  • 機密アプリケーションに 2FA がある
  • CSRF 保護が無効になっていない
  • account.accountLinking がレビュー済み

トラブルシューティング

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

リソース

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
rinbarpen
リポジトリ
rinbarpen/llm-router
ライセンス
MIT
最終更新
2026/5/9

Source: https://github.com/rinbarpen/llm-router / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: rinbarpen · rinbarpen/llm-router · ライセンス: MIT