Skip to content

メール+パスワード認証の基盤実装(サインアップ・サインイン・メール確認) #45

@k0kishima

Description

@k0kishima

概要

現在 Google OAuth のみで実装されている認証に、メールアドレス+パスワードによるサインアップ・サインイン機能を追加する。

背景

登録方法の選択肢を増やすため、Supabase Auth のメール+パスワード認証を有効化する。メール確認フロー付き。

スコープ

1. Supabase 設定変更

  • supabase/config.toml:
    • [auth.email] enable_confirmations = true に変更
    • minimum_password_length8 以上に引き上げ
    • password_requirementsletters_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)

  • onAuthStateChangePASSWORD_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 ログインが引き続き動作する
  • i18n(日本語・英語)が対応済み

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions