【Laravel】セッションタイムアウト後のログイン処理で前回URLに遷移するバグ修正

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。iQeda [@iQeeeda] です。

  1. A アカウントでログインして /hoge ページに滞在する
  2. 長時間滞在したので A はセッションタイムアウトする (トークン期限切れ)
  3. 画面をリロードするとログイン画面にリダイレクトされる
  4. B アカウントでログインする
  5. 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');
}

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

カテゴリ「Develop」の最新記事

最新記事

コメントを残す

*