better-auth-best-practices
Better Authと統合するスキルです。Better Authは包括的なTypeScript認証フレームワークで、このスキルを使用することで、アプリケーションに認証機能を簡単に組み込むことができます。ユーザーのログイン・ログアウト、セッション管理、多様な認証方法への対応など、認証に関わる機能を効率的に実装できます。
description の原文を見る
Skill for integrating Better Auth - the comprehensive TypeScript authentication framework.
SKILL.md 本文
Better Auth 統合ガイド
常に better-auth.com/docs でコード例と最新の API を確認してください。
Better Auth は TypeScript ファースト、フレームワーク非依存の認証フレームワークで、メール/パスワード、OAuth、マジックリンク、パスキー、およびプラグインを通じた多くの機能をサポートしています。
クイックリファレンス
環境変数
BETTER_AUTH_SECRET- 暗号化シークレット(最小 32 文字)。生成方法:openssl rand -base64 32BETTER_AUTH_URL- ベース URL(例:https://example.com)
環境変数が設定されていない場合のみ、設定で baseURL/secret を定義します。
ファイル場所
CLI は auth.ts を次の場所で探します: ./, ./lib, ./utils, または ./src 配下。カスタムパスの場合は --config を使用します。
CLI コマンド
npx @better-auth/cli@latest migrate- スキーマを適用(ビルトインアダプタ)npx @better-auth/cli@latest generate- Prisma/Drizzle 用スキーマを生成npx @better-auth/cli mcp --cursor- MCP を AI ツールに追加
プラグインの追加/変更後は再実行します。
コア設定オプション
| オプション | 説明 |
|---|---|
appName | オプション:表示名 |
baseURL | BETTER_AUTH_URL が設定されていない場合のみ |
basePath | デフォルト /api/auth。ルートの場合は / に設定 |
secret | BETTER_AUTH_SECRET が設定されていない場合のみ |
database | ほとんどの機能に必須。アダプタのドキュメントを参照 |
secondaryStorage | セッションとレート制限用の Redis/KV |
emailAndPassword | { enabled: true } で有効化 |
socialProviders | { google: { clientId, clientSecret }, ... } |
plugins | プラグインの配列 |
trustedOrigins | CSRF ホワイトリスト |
データベース
直接接続: pg.Pool, mysql2 プール, better-sqlite3, または bun:sqlite インスタンスを渡します。
ORM アダプタ: better-auth/adapters/drizzle, better-auth/adapters/prisma, better-auth/adapters/mongodb からインポートします。
重要: Better Auth はアダプタのモデル名を使用します。基になるテーブル名ではありません。Prisma モデルが User でテーブルが users にマッピングされている場合、modelName: "user"(Prisma リファレンス)を使用します。"users" ではなく。
セッション管理
ストレージの優先順位:
secondaryStorageが定義されている場合 → セッションはそこに保存(DB ではない)- DB にも永続化するには
session.storeSessionInDatabase: trueを設定 - データベースなし +
cookieCache→ 完全なステートレスモード
クッキーキャッシュ戦略:
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 クッキーを強制disableCSRFCheck- ⚠️ セキュリティリスクdisableOriginCheck- ⚠️ セキュリティリスクcrossSubDomainCookies.enabled- サブドメイン間でクッキーを共有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(vanilla), 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>()。
よくある落とし穴
- モデル名 vs テーブル名 - 設定は DB テーブル名ではなく ORM モデル名を使用
- プラグインスキーマ - プラグイン追加後は CLI を再実行
- セカンダリストレージ - デフォルトではセッションは DB ではなくそこに保存
- クッキーキャッシュ - カスタムセッションフィールドはキャッシュされません。常に再取得
- ステートレスモード - DB なし = セッションはクッキーのみ。キャッシュ有効期限でログアウト
- メール変更フロー - まず現在のメールに送信してから、新しいメールに送信
リソース
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- rinbarpen
- リポジトリ
- rinbarpen/llm-router
- ライセンス
- MIT
- 最終更新
- 2026/5/9
Source: https://github.com/rinbarpen/llm-router / ライセンス: MIT