こんにちは。iQeda [@iQeeeda] です。
- A アカウントでログインして
/hogeページに滞在する - 長時間滞在したので A はセッションタイムアウトする (トークン期限切れ)
- 画面をリロードするとログイン画面にリダイレクトされる
- B アカウントでログインする
- A が滞在していた
/hogeに遷移してしまう
他のアカウントでログインしたにも関わらず、デフォルトのリダイレクト処理が効かない場面に遭遇しました。これは vendor/laravel/framework/src/Illuminate/Routing/Redirector.php の下記処理が原因でした。
public function intended($default = '/', $status = 302, $headers = [], $secure = null)
{
// セッションの url.intended が残っていると $default よりそっちの URL を優先してしまう
$path = $this->session->pull('url.intended', $default);
return $this->to($path, $status, $headers, $secure);
}
ログイン画面のコントローラでセッション削除すれば OK です!
public function showLoginForm()
{
// セッションタイムアウトしたとき、前回 URL 情報がセッションに残ってしまう
// 別アカウントでログインし直した場合もその URL を見に行こうとしてしまうので削除する
if (Session::has('url.intended')) {
Session::forget('url.intended');
}
return view('auth.login');
}
No comments yet