認証システム
ユーザー認証と認可
概要
EasyStarter は Better Auth を使用して認証を行い、完全なユーザー管理ソリューションを提供します。
サポートされる認証方法
| 方法 | 説明 |
|---|---|
| メール/パスワード | メール確認付きの従来の登録方式 |
| GitHub OAuth | GitHub アカウントでワンクリックログイン |
| Google OAuth | Google アカウントでワンクリックログイン |
設定
環境変数
# 必須
AUTH_SECRET=your-secret-key
# OAuth(オプション)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# メール(確認用)
RESEND_API_KEY=your-resend-api-keyフロントエンドでの使用
サインイン
import { authClient } from "@/lib/auth-client";
// メール/パスワード
await authClient.signIn.email({
email: "user@example.com",
password: "password123",
});
// OAuth
await authClient.signIn.social({ provider: "github" });
await authClient.signIn.social({ provider: "google" });サインアウト
await authClient.signOut();現在のユーザーを取得
const { data: session } = authClient.useSession();
const user = session?.user;セッション管理
Better Auth がセッションを自動管理します:
- Cookie ベースのセッション保存
- 期限切れ前の自動更新
- タブ間同期
ルート保護
認証ミドルウェアを使用してルートを保護:
// ルートコンポーネント内
import { createFileRoute, redirect } from "@tanstack/react-router";
export const Route = createFileRoute("/dashboard")({
beforeLoad: async ({ context }) => {
if (!context.user) {
throw redirect({ to: "/sign-in" });
}
},
});ロールと権限
EasyStarter は @repo/app-config/rbac に静的なグローバルロール行列を持ち、user / admin の 2 ロールを定義します。アカウントはちょうど 1 つのロールを持ちます。ロールは権限であり、Membership Tier(課金エンタイトルメント)ではありません。
Demo サンドボックス
ユーザー管理画面は分離されたサンドボックスです。サインインした実アカウントはすべて管理者となり、それぞれ公開された合成アカウントの独立した一覧を持ちます。ロール変更や凍結はそのアカウント自身のテストデータだけに作用し、実アカウントは一覧に表示されません。実際のプロダクトを開発するテンプレート利用者は、独自のグローバル管理または権限モデルにこの境界を置き換えてください。
閉じられた Better Auth admin HTTP ルート
admin プラグインはロール保存、ban セマンティクス、サーバー側の auth.api.* 呼び出しのために登録されています。/api/auth/admin/* HTTP 面は apps/server/src/index.ts で意図的に拒否されます。管理操作は oRPC(users.list / users.setRole / users.ban / users.unban)経由で行い、このサーバーに対して authClient.admin.* を呼ばないでください。