Appearance
画面設計: 認証・ログイン
関連: ia.md §2.6 / auth-rbac.md / api.md §2
対象画面
/login— ログイン/auth/reset/request— パスワードリセット要求/auth/reset/confirm— リセット確定- 同意取得画面(初回ログイン時オーバーレイ、
UC-N-01)
ログイン /login
レイアウト
- モバイル:中央揃え・縦積み、フォーム幅 90%
- PC:左側にブランドビジュアル、右側にフォーム(幅 400)
要素
- ロゴ + サービス名(日本語/ベトナム語切替)
- メールアドレス入力(type=email、required)
- パスワード入力(type=password、required、表示切替ボタン)
- ログインボタン(primary、loading表示)
- 「パスワードを忘れた」リンク →
/auth/reset/request - 言語切替(日本語/ベトナム語)
- 利用規約・プライバシーポリシーへのリンク(ログイン画面ではチェック不要。明示的同意は下記「同意取得オーバーレイ」で取得する)
バリデーション
- メール形式:Zod
email() - パスワード:空でないこと(要件詳細は登録画面側)
- エラー時:下部にサマリー
type.smcolor.danger
エラー応答
| HTTP | 表示 |
|---|---|
| 401 | 「メールアドレスまたはパスワードが正しくありません」(一般化して存在秘匿) |
| 429 | 「試行回数上限。○分後に再試行してください」 |
| 500 | 「一時的なエラー。時間をおいて再試行を」 |
パスワードリセット
/auth/reset/request
- メール入力+送信
- 成功時:「メールを確認してください」画面に遷移(実際の送信有無は秘匿)
- 実装注意:メール存在有無でレスポンスを変えない
/auth/reset/confirm
- URL トークン検証
- 新しいパスワード(+確認)
- 要件:12文字以上・英数混在
- 成功時:ログイン画面へ誘導
テナント選択(複数ロール所持時)
- ログイン成功後、
RoleAssignmentが 2 件以上ある場合のみ/auth/tenantを表示 - 単一所属ならスキップし即ホームへ
- 選択後、セッションにアクティブテナントを固定(UI ヘッダーで切替可能、切替は再ログイン相当扱い)
MFA 画面(対象ロールのみ)
- 必須:
org_admin(OA)、operator(SU) - 推奨:
teacher(TA)、trainer(TM) - 画面:TOTP 入力(将来 WebAuthn 切替)
- 失敗 5 回でアカウントロック(OA 解錠フロー)
同意取得オーバーレイ
初回ログイン後、テナント選択・MFA 後、/app/home 等の前に表示。
要素
- 目的:学習行動の計測・保存・分析・企業への開示範囲の説明
- 各項目ごとにチェック(学習ログ/企業開示)
- 「詳細」でプライバシーポリシー遷移
- 同意 → ホームへ / 不同意 → ログアウト + 「利用できる範囲に制限があります」の説明
i18n キー(抜粋)
auth.login.title
auth.login.email.label
auth.login.password.label
auth.login.submit
auth.reset.request.title
auth.reset.confirm.title
auth.consent.title
auth.consent.learning_log.description
auth.consent.employer_disclosure.descriptionアクセシビリティ
- 全フォームにラベル、
aria-invalidを適切に - フォーカスリング:
color.primary.500ベース - Enter 送信対応
モック挙動(M1)
- URL クエリ
?role=learnerなどで疑似ログイン即遷移可能 - 実際の認証ロジックなし、UI のみ検証目的
未確定
- SSO(将来)の扱い
- WebAuthn 切替時期