mcpField
B
better-auth-best-practices

better-auth-best-practices

github.com/andrelandgrafセキュリティ23170 回インストール21 週間前に更新
リポジトリ

better-auth-best-practices について

better-auth-best-practicesは、Better Authを利用する開発者向けの統合ガイドです。設定、データベース、セッション、セキュリティ、プラグイン、クライアントの要点と設定時の注意点をまとめています。

主な機能

  1. 01基本設定と環境変数
  2. 02データベースアダプターとモデル対応
  3. 03セッション保存とCookieキャッシュ
  4. 04メールフローとセキュリティ設定
  5. 05フック、プラグイン、クライアントの利用

活用シーン

  1. 01Better Authとデータベースの設定
  2. 02セッション保存やモデル対応の調査
  3. 03プラグイン追加後のスキーマ生成
  4. 04認証フローのセキュリティ設定の確認

MCP 対応

READMEには、AIツールにMCPを追加するBetter Auth CLIコマンド `mcp --cursor` が記載されています。

インストール

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

$npx skills add https://github.com/andrelandgraf/fullstackrecipes --skill better-auth-best-practices

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

詳細

Better Auth 統合ガイド

コード例と最新の API については、必ず better-auth.com/docs を参照してください。

Better Auth は TypeScript を優先し、フレームワークに依存しない認証フレームワークです。プラグインを通じて、メールアドレス/パスワード、OAuth、マジックリンク、パスキーなどをサポートします。


クイックリファレンス

環境変数
  • BETTER_AUTH_SECRET - 暗号化シークレット(32 文字以上)。生成方法:openssl rand -base64 32
  • BETTER_AUTH_URL - ベース URL(例:https://example.com)

環境変数が設定されていない場合に限り、設定で baseURL/secret を定義してください。

ファイルの場所

CLI は ./、./lib、./utils、または ./src 以下で auth.ts を検索します。カスタムパスには --config を使用してください。

CLI コマンド
  • npx @better-auth/cli@latest migrate - スキーマを適用します(組み込みアダプター)
  • npx @better-auth/cli@latest generate - Prisma/Drizzle 用のスキーマを生成します
  • npx @better-auth/cli mcp --cursor - AI ツールに MCP を追加します

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


コア設定オプション

オプション備考
appName表示名(省略可能)
baseURLBETTER_AUTH_URL が未設定の場合のみ
basePathデフォルトは /api/auth。ルートには / を設定します。
secretBETTER_AUTH_SECRET が未設定の場合のみ
databaseほとんどの機能で必須です。アダプターのドキュメントを参照してください。
secondaryStorageセッションとレート制限用の Redis/KV
emailAndPassword有効にするには { enabled: true } を設定します
socialProviders{ google: { clientId, clientSecret }, ... }
pluginsプラグインの配列
trustedOriginsCSRF の許可リスト

データベース

直接接続: pg.Pool、mysql2 のプール、better-sqlite3、または bun:sqlite のインスタンスを渡します。

ORM アダプター: better-auth/adapters/drizzle、better-auth/adapters/prisma、better-auth/adapters/mongodb からインポートします。

重要: Better Auth が使用するのは、実際のテーブル名ではなくアダプターのモデル名です。Prisma のモデルが users テーブルに対応する User の場合、"users" ではなく modelName: "user"(Prisma の参照名)を使用してください。


セッション管理

ストレージの優先順位:

  1. secondaryStorage が定義されている場合 → セッションはそこに保存されます(DB には保存されません)
  2. session.storeSessionInDatabase: true を設定すると、DB にも保存されます
  3. データベースがなく、cookieCache がある場合 → 完全なステートレスモードになります

Cookie キャッシュの戦略:

  • compact(デフォルト) - Base64url + HMAC。最小サイズです。
  • jwt - 標準の JWT。読み取り可能ですが、署名されています。
  • jwe - 暗号化されます。最高レベルのセキュリティです。

主なオプション: session.expiresIn(デフォルトは 7 日)、session.updateAge(更新間隔)、session.cookieCache.maxAge、session.cookieCache.version(変更するとすべてのセッションが無効になります)。


ユーザーとアカウントの設定

ユーザー: user.modelName、user.fields(カラムのマッピング)、user.additionalFields、user.changeEmail.enabled(デフォルトで無効)、user.deleteUser.enabled(デフォルトで無効)。

アカウント: account.modelName、account.accountLinking.enabled、account.storeAccountCookie(ステートレス OAuth 用)。

登録に必須: email と name のフィールド。


メールのフロー

  • emailVerification.sendVerificationEmail - 検証を機能させるには定義が必要です
  • emailVerification.sendOnSignUp/sendOnSignIn - 自動送信のトリガー
  • emailAndPassword.sendResetPassword - パスワードリセットメールのハンドラー

セキュリティ

advanced 内:

  • useSecureCookies - HTTPS Cookie を強制します
  • disableCSRFCheck - ⚠️ セキュリティリスク
  • disableOriginCheck - ⚠️ セキュリティリスク
  • crossSubDomainCookies.enabled - サブドメイン間で Cookie を共有します
  • ipAddress.ipAddressHeaders - プロキシ用のカスタム IP ヘッダー
  • database.generateId - カスタム ID 生成、または "serial"/"uuid"/false

レート制限: rateLimit.enabled、rateLimit.window、rateLimit.max、rateLimit.storage("memory" | "database" | "secondary-storage")。


フック

エンドポイントフック: hooks.before / hooks.after - { matcher, handler } の配列です。createAuthMiddleware を使用します。ctx.path、ctx.context.returned(after)、ctx.context.session にアクセスできます。

データベースフック: databaseHooks.user.create.before/after。session と account にも同じフックがあります。デフォルト値の追加や作成後のアクションに便利です。

フックコンテキスト(ctx.context): session、secret、authCookies、password.hash()/verify()、adapter、internalAdapter、generateId()、tables、baseURL。


プラグイン

ツリーシェイキングのため、専用パスからインポートします:

import { twoFactor } from "better-auth/plugins/two-factor"

from "better-auth/plugins" からはインポートしないでください。

よく使われるプラグイン: twoFactor、organization、passkey、magicLink、emailOtp、username、phoneNumber、admin、apiKey、bearer、jwt、multiSession、sso、oauthProvider、oidcProvider、openAPI、genericOAuth。

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


クライアント

インポート元:better-auth/client(バニラ)、better-auth/react、better-auth/vue、better-auth/svelte、better-auth/solid。

主なメソッド:signUp.email()、signIn.email()、signIn.social()、signOut()、useSession()、getSession()、revokeSession()、revokeSessions()。


型安全性

型を推論します:typeof auth.$Infer.Session、typeof auth.$Infer.Session.user。

クライアントとサーバーを別々のプロジェクトにする場合:createAuthClient<typeof auth>()。


よくある注意点

  1. モデル名とテーブル名 - 設定では DB テーブル名ではなく ORM モデル名を使用します
  2. プラグインのスキーマ - プラグインの追加後に CLI を再実行します
  3. セカンダリストレージ - セッションは DB ではなく、デフォルトでセカンダリストレージに保存されます
  4. Cookie キャッシュ - カスタムのセッションフィールドはキャッシュされず、常に再取得されます
  5. ステートレスモード - DB がない場合、セッションは Cookie のみに保存され、キャッシュの有効期限が切れるとログアウトします
  6. メールアドレス変更のフロー - まず現在のメールアドレスに送信し、その後、新しいメールアドレスに送信します

リソース

コメント