認可テストが200を返したとき、子ページより親レイアウトを先に見た話

認可テストが200を返したとき、子ページより親レイアウトを先に見た話

記事
IT・テクノロジー
今日は、Next.jsで作っている管理画面の認可テストを追加しました。

確認したかったのは、一般ユーザーが管理者専用のメンバー画面を開いたとき、権限エラーのページへ正しく転送されるかどうかです。想定は307リダイレクト。しかし実際のHTTPレスポンスは200でした。

最初は子ページ側の認可処理を疑いました。そこでは、必要な権限を満たさない場合に専用ページへ移動させる関数を呼んでいます。ただ、実際にはその処理まで到達していませんでした。

先に動いていたのは、管理画面全体を囲む親レイアウトです。親側が権限不足を検知すると、その場で「アクセスできません」という画面を返していたため、子ページが用意したリダイレクトは実行されません。見た目では拒否できていても、HTTPとしては「正常表示」の200になる状態でした。

今回、大切だったのは「権限がない人に内容が見えない」だけで合格にしなかったことです。画面表示、HTTPステータス、遷移先は別々に確認する必要があります。自動テストもブラウザ上の見た目だけではなく、実際のNext.jsを起動してレスポンスを受け取る形にしました。

原因を確認できた段階で、製品コードの修正は止めました。親レイアウトと子ページのどちらを仕様の基準にするか決めないまま直すと、他の管理画面まで挙動を変える恐れがあるためです。残りの権限パターンや正常系の確認も、方針決定後に続けます。

管理画面の認証・認可、不具合調査、既存Next.jsの改修では、「画面が動いた」だけで終わらせず、権限境界とHTTPの挙動まで切り分けます。部分的な調査や原因特定からでも、ココナラの出品サービスよりご相談いただけます。
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す