better-auth-ui-react について
Better Auth UI の共有データレイヤー、プロバイダー、認証フックを React に組み込む開発者向けガイドです。SSR、ルーティング、クエリーキャッシュ、プラグイン設定の注意点も扱います。
主な機能
- 01認証クライアントとUIプロバイダーを設定
- 02セッション照会と認証更新フックを利用
- 03ブラウザーおよびサーバーローダーを設定
- 04リクエスト単位のクエリークライアントでSSRに対応
- 05プラグインと組織ルートを設定
活用シーン
- 01ReactアプリにBetter Auth UIを導入
- 02認証ページのナビゲーションとリダイレクトを設定
- 03SSRでセッションを読み込みハイドレーション
- 04ルートに応じて組織を選びプラグイン画面を有効化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ better-auth-ui/ better-auth-ui --skill better-auth-ui-reactインストール後、Claude Code で/better-auth-ui-reactを入力して読み込まれたか確認します。
同梱ファイルreferences/shadcn.md
詳細
React 向け Better Auth UI
API のバージョンは、インストール済みパッケージのエクスポートを基準にしてください。このスキルでは、1.7 のパッケージ構成を対象とします。
UI を選択する
- コピーした shadcn/ui コンポーネントを使う場合は、shadcn の統合を参照してください。
- パッケージ化された HeroUI コンポーネントを使う場合は、
@better-auth-ui/herouiと、利用可能であればそのbetter-auth-ui-herouiスキルを使用してください。 - カスタムインターフェースを使う場合は、
@better-auth-ui/reactのプロバイダーとフックを直接使用してください。
@better-auth-ui/react は共有データレイヤーです。コピーされた shadcn の Auth、Settings、UserButton コンポーネントはエクスポートしません。
アプリケーションを設定する
- Better Auth を設定し、そのハンドラーをアプリケーションのサーバールートにマウントします。
better-auth/reactのcreateAuthClientで React クライアントを作成します。- 認証関連のコンシューマーを、選択した UI の
AuthProviderでラップします。 authClient、ルーター互換のnavigate、アプリケーションのqueryClientを渡します。- リダイレクト先、UI パス、プラグインをアプリケーションのルートに合わせて設定します。
ナビゲーションコールバックは { to, replace? } を受け取ります。Next.js の router.push と router.replace を直接渡すのではなく、このオブジェクトを受け取る形に適合させてください。
React プロバイダーは、明示的に指定された QueryClient、既存の Query コンテキスト、フォールバックの順に選択します。SSR では、リクエストスコープのクライアントを渡してください。
Next.js では、インタラクティブなプロバイダーとフックにクライアント境界を使用してください。サーバー設定、シークレット、/server のインポートは、それらの境界の外に置いてください。
認証データの読み取りと変更
import { useSession, useSignInEmail } from "@better-auth-ui/react"
const session = useSession(authClient, { staleTime: 5_000 })
const signIn = useSignInEmail(authClient)
これらのフックは、React コンポーネントまたはカスタムフックの中で呼び出してください。認証クライアントを明示的に指定します。
クエリでは、data、isPending、error などの TanStack Query の状態を利用できます。ミューテーションでは、mutate、mutateAsync、isPending を利用できます。
コンシューマー間で Query キャッシュを共有する場合は、Better Auth UI の useSession を使用してください。Better Auth 独自の authClient.useSession() は異なるサブスクリプション経路を使用します。
オプションのフックは @better-auth-ui/react/plugins/<plugin> からインポートします。ローダーファクトリーとヘルパーは、@better-auth-ui/core またはそのプラグインのエントリーポイントからインポートします。
クエリの解決中も、ページの見出し、ナビゲーション、独立したコンテンツはマウントしたままにしてください。未解決の値や、依存するアクションに限って保留状態を表示します。
ローダーと SSR
ブラウザーのローダーには ensureSession(queryClient, authClient) を使用します。サーバーでは @better-auth-ui/core/server の ensureSessionServer(queryClient, auth, { headers }) を使用します。
サーバーリクエストごとに QueryClient を 1 つ作成します。同じクライアントをローダー、ハイドレーション、AuthProvider に渡してください。
TanStack Start では、ドキュメントに記載された Router/Query の SSR 統合を使用します。Next.js では、直接のサーバー呼び出しをサーバー専用コードに置いてください。
1 人のユーザーのセッションを、モジュールレベルのサーバー QueryClient にキャッシュしないでください。ルートガードに加え、サーバーエンドポイントでも権限を検証してください。
プラグインと組織
該当する場合は、各機能を Better Auth サーバー、そのクライアントプラグイン、選択した UI プラグインの 3 か所で有効にしてください。
選択したコンポーネントシステムに付属する UI プラグインを使用します。コアプラグインは共有動作を提供しますが、コピーされた UI ビューは提供しません。
ルート検証には、プラグインのビューパスを含めてください。認証のベースパスをハードコードすると、有効な招待ルートや二要素認証ルートが拒否されることがあります。
ルートのスラッグまたは明示的な ID から組織を選択します。個人アカウントのルートには null を使用し、organizationPlugin({ slug }) を渡してください。
ルートが変わったときは、この値を最新の状態に保ってください。アクセス元として、セッションのアクティブな組織の状態や setActive を使用しないでください。
参考資料
ウェブサイトの例は最新リリースに基づいています。新しいドキュメントに記載された API を使用する前に、インストール済みのパッケージを確認してください。