Skip to content

fix(booskiff-web): real ログイン成功後に Hydra OAuth 開始まで UI 導線を自動完結 (#20) - #22

Merged
turtton merged 1 commit into
mainfrom
login-flow-oauth-start
Sep 14, 2026
Merged

turtton merged 1 commit into
mainfrom
login-flow-oauth-start

Conversation

@turtton

@turtton turtton commented Sep 14, 2026

Copy link
Copy Markdown
Member

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 の制約に適応させた形で採用しています。

  • (a) の原文どおりの 302 は技術的に成立しない: login 送信は Affjax (XHR) であり、302 は fetch/XHR が opaque に自動追随します。/auth/oauth/start 以降の Hydra authorize → login/consent provider という cross-origin のリダイレクト chain は CORS 非対応の HTML 画面遷移であり、XHR では完走できません (network error となり login 失敗扱いになる)。ブラウザのトップレベル遷移が必須です。
  • 採用形: real モードの POST /auth/login 成功レスポンスを 200 のまま next: "/auth/oauth/start?return_to=/login" フィールド付きで返し、UI は next が存在する場合にトップレベル遷移 (Location.assign) するだけにしました。フロー判断 (OAuth 開始へ進むか) は BFF が保持し、UI はモード判定を持たない (mock レスポンスには next が無く、従来どおり SPA 遷移)。これは (a) の「UI 変更不要・モード判定不要」という意図を、XHR 前提で実現可能な最小形にしたものです。
  • (b) を採らなかった理由: UI 主導は UI 側に real/mock のモード判定経路 (config endpoint や SSR 埋め込み) が必要になり、導線の判断がクライアントへ漏れます。BFF が次の遷移先を決める方が責務として自然です。
  • return_to=/login は booskiff-web: 認証済み /drive のフルページロードで resume DOM が破損する (フォルダセクション重複・ハンドラ不活化) #19 (認証済み /drive フルロード時の resume DOM 破損) の SPA 経路 workaround を BFF 側で維持するための指定です。booskiff-web: 認証済み /drive のフルページロードで resume DOM が破損する (フォルダセクション重複・ハンドラ不活化) #19 修正後に /drive へ戻すことを再検討してください (コード内コメントにも記載)。

変更内容

検証結果 (全て実施済み・green)

検証 結果
scripts/e2e-real.sh (Hydra + Kratos real E2E、workaround 解除後) 4/4 passed — happy path が login フォーム → consent → callback → /drive → folder 作成 → logout まで UI 導線のみで完走。負の系 (consent 拒否 / state 不一致 / 不正 code) も fail-closed を確認
scripts/e2e.sh (mock E2E) 16/16 passed — 無回帰
bun test bff/ 99 pass / 0 fail (baseline 97 + 新規 2)
nix develop --command spago build / spago test 成功

Out of scope の確認: mock モードの挙動変更なし、認証ロジック自体の変更なし、#19 の /drive resume DOM 問題には未着手 (return_to=/login workaround は維持)。

@turtton turtton added the intent-pr-approved intent-cli workflow label label Sep 14, 2026
@turtton
turtton merged commit 59797db into main Sep 14, 2026
4 checks passed
@turtton
turtton deleted the login-flow-oauth-start branch September 14, 2026 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

intent-pr-approved intent-cli workflow label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

login-flow-oauth-start: booskiff-web real モードのログイン導線修正 — Kratos 認証成功後に Hydra OAuth を自動開始

1 participant