Repository navigation
fix(booskiff-web): real ログイン成功後に Hydra OAuth 開始まで UI 導線を自動完結 (#20) - #22
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #20
概要
real モード (USE_MOCK=false) で、ログインフォーム送信 (Kratos 資格情報認証) の成功後に Hydra OAuth 開始 (
/auth/oauth/start) までが UI 導線として自動完結するようにしました。従来は login 成功がそのままSessionCheckedにマップされ PKCE フローが開始されず、booskiff_sessionが発行されないため /drive で API 401 となっていました (#17)。設計判断: (a) BFF 主導 — XHR 適応形
パケットの候補は (a) BFF 主導 (成功レスポンスを 302
/auth/oauth/startにする) / (b) UI 主導 (クライアントが/auth/oauth/startへ遷移する) でした。(a) BFF 主導を、XHR の制約に適応させた形で採用しています。/auth/oauth/start以降の Hydra authorize → login/consent provider という cross-origin のリダイレクト chain は CORS 非対応の HTML 画面遷移であり、XHR では完走できません (network error となり login 失敗扱いになる)。ブラウザのトップレベル遷移が必須です。POST /auth/login成功レスポンスを 200 のままnext: "/auth/oauth/start?return_to=/login"フィールド付きで返し、UI はnextが存在する場合にトップレベル遷移 (Location.assign) するだけにしました。フロー判断 (OAuth 開始へ進むか) は BFF が保持し、UI はモード判定を持たない (mock レスポンスにはnextが無く、従来どおり SPA 遷移)。これは (a) の「UI 変更不要・モード判定不要」という意図を、XHR 前提で実現可能な最小形にしたものです。return_to=/loginは booskiff-web: 認証済み /drive のフルページロードで resume DOM が破損する (フォルダセクション重複・ハンドラ不活化) #19 (認証済み /drive フルロード時の resume DOM 破損) の SPA 経路 workaround を BFF 側で維持するための指定です。booskiff-web: 認証済み /drive のフルページロードで resume DOM が破損する (フォルダセクション重複・ハンドラ不活化) #19 修正後に/driveへ戻すことを再検討してください (コード内コメントにも記載)。変更内容
bff/auth-real.ts: real login 成功レスポンスにnextを追加 (Kratos cookie の適用は維持。認証ロジック自体・id_token 検証・session seal・CSRF は PR fix(booskiff-web): PR #9 レビュー残件の対応 (#10) #14 の状態から不変)bff/auth-real.test.ts(新規): Kratos スタブを使った real login の単体テスト 2 件 — 成功時のnext+ Kratos cookie 適用 + app session 未発行、認証失敗時にnextを含まないことsrc/App/Api/Auth.purs:LoginResponseにnext :: Maybe Stringを追加src/Client/Update.purs:submitLoginAffでnextがあればトップレベル遷移、なければ従来のSessionCheckedSPA 経路spago.yaml/spago.lock:web-html依存を追加e2e/real/tests/auth.spec.ts:enterCredentialsの/auth/oauth/start明示遷移 workaround を解除し、UI 導線のみで consent 画面に到達することを検証README.md: 暫定措置の記述を更新 (fix(booskiff-web): real login UI does not start Hydra OAuth after Kratos authentication #17/login-flow-oauth-start: booskiff-web real モードのログイン導線修正 — Kratos 認証成功後に Hydra OAuth を自動開始 #20 修正済み、booskiff-web: 認証済み /drive のフルページロードで resume DOM が破損する (フォルダセクション重複・ハンドラ不活化) #19 の SPA 経路は BFF 側で維持)検証結果 (全て実施済み・green)
scripts/e2e-real.sh(Hydra + Kratos real E2E、workaround 解除後)scripts/e2e.sh(mock E2E)bun test bff/nix develop --command spago build/spago testOut of scope の確認: mock モードの挙動変更なし、認証ロジック自体の変更なし、#19 の
/driveresume DOM 問題には未着手 (return_to=/loginworkaround は維持)。