概要
現在 Google OAuth のみで実装されている認証に、メールアドレス+パスワードによるサインアップ・サインイン機能を追加する。
背景
登録方法の選択肢を増やすため、Supabase Auth のメール+パスワード認証を有効化する。メール確認フロー付き。
スコープ
1. Supabase 設定変更
supabase/config.toml:
[auth.email] enable_confirmations = true に変更
minimum_password_length を 8 以上に引き上げ
password_requirements に letters_digits 等を設定
2. auth/callback ルート拡張 (src/app/auth/callback/route.ts)
- 既存の OAuth
code パラメータ処理に加え、以下を追加:
- 確認成功後は既存 OAuth フローと同じ流れ(プロフィール存在チェック → setup-username or mypage)
3. Sign Up ページ変更 (src/app/[locale]/(public)/sign-up/page.tsx)
EmailSignUpForm コンポーネントの新規作成:
- メールアドレス、パスワード、パスワード確認の入力フィールド
- クライアントサイドバリデーション
supabase.auth.signUp({ email, password }) の呼び出し
- 成功時に verify-email ページへリダイレクト
- 既存の Google OAuth ボタンと区切り線(「または」)で共存
4. Sign In ページ変更 (src/app/[locale]/(public)/sign-in/page.tsx)
EmailPasswordForm コンポーネントの新規作成:
- 既存の Google OAuth ボタンと区切り線で共存
5. メール確認待ちページ新規作成
- 推奨パス:
src/app/[locale]/(public)/sign-up/verify-email/page.tsx
- 「確認メールを送信しました。メールを確認してください」的な案内表示
- メール再送ボタン
6. AuthContext 拡張 (_contexts/AuthContext.tsx)
onAuthStateChange で PASSWORD_RECOVERY イベントをハンドリング
- パスワードリセットリンクからアクセスした際のフロー対応
7. i18n メッセージ追加
src/messages/en.json, ja.json に以下の名前空間を追加・拡張:
signIn: メール/パスワード関連ラベル・エラーメッセージ
signUp: 同上
verifyEmail: メール確認待ちページ用
注意事項
- アカウント統合: 同じメールで Google と Email 両方で登録した場合、Supabase はデフォルトで自動統合する(
enable_manual_linking = false)
- 確認前のログイン不可:
enable_confirmations = true の場合、signUp はセッションを返さない。メール確認完了までログイン不可
- ローカルテスト: Inbucket (
http://127.0.0.1:54324) で確認メールをテスト可能
受け入れ条件
概要
現在 Google OAuth のみで実装されている認証に、メールアドレス+パスワードによるサインアップ・サインイン機能を追加する。
背景
登録方法の選択肢を増やすため、Supabase Auth のメール+パスワード認証を有効化する。メール確認フロー付き。
スコープ
1. Supabase 設定変更
supabase/config.toml:[auth.email] enable_confirmations = trueに変更minimum_password_lengthを8以上に引き上げpassword_requirementsにletters_digits等を設定2. auth/callback ルート拡張 (
src/app/auth/callback/route.ts)codeパラメータ処理に加え、以下を追加:token_hash+type=email→ メール確認フロー(verifyOtp)token_hash+type=recovery→ パスワードリセットフロー(Issue Consolidate chess.js usage into @blindfold-chess/features #2 で利用)3. Sign Up ページ変更 (
src/app/[locale]/(public)/sign-up/page.tsx)EmailSignUpFormコンポーネントの新規作成:supabase.auth.signUp({ email, password })の呼び出し4. Sign In ページ変更 (
src/app/[locale]/(public)/sign-in/page.tsx)EmailPasswordFormコンポーネントの新規作成:supabase.auth.signInWithPassword({ email, password })の呼び出し5. メール確認待ちページ新規作成
src/app/[locale]/(public)/sign-up/verify-email/page.tsx6. AuthContext 拡張 (
_contexts/AuthContext.tsx)onAuthStateChangeでPASSWORD_RECOVERYイベントをハンドリング7. i18n メッセージ追加
src/messages/en.json,ja.jsonに以下の名前空間を追加・拡張:signIn: メール/パスワード関連ラベル・エラーメッセージsignUp: 同上verifyEmail: メール確認待ちページ用注意事項
enable_manual_linking = false)enable_confirmations = trueの場合、signUpはセッションを返さない。メール確認完了までログイン不可http://127.0.0.1:54324) で確認メールをテスト可能受け入れ条件