shun123
@shun123 (shun noel)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Laravel】セッションタイムアウト後にログイン処理を行うと、タイムアウト時点のURLに遷移する

Q&A

Closed

前提

Laravelで作成したWebサービスでセッションタイムアウト発生すると、
ログイン画面に遷移するようにしています。
またマルチドメインにしているため、ログイン後の遷移先は、「管理者」ユーザと
「一般」ユーザで別にしています。

解決したいこと

「管理者」ユーザでセッションタイムアウトした後に、「一般」ユーザでログインをすると、
セッションタイムアウト前の「管理者」ユーザのページに遷移してしまいます。
具体的には、セッションタイムアウト後の再ログインで以下「一般ページ」に遷移するようにしているのですが、
実際には「管理者ページ」へ遷移されてしまいます。
  ・管理者ページ:admin/mypage
  ・一般ページ:user/mypage

ログイン後の遷移先はLoginControllerの「redirectTo」メソッドとGateを使用し、
以下のように振り分けています。
ログを確認したところ、「一般ユーザ」での再ログイン時にはちゃんと
「return route('user.mypage');」を通っていました。
ただブラウザで表示されるURLは「admin/mypage」となってしまいます。

LoginContoroller.php
    public function redirectTo()
    {      
      if (Gate::allows('isAdmin')){
        \Log::info('adminでログイン');
        return route('admin.mypage');
      }      
      else {
        \Log::info('userでログイン');
        return route('user.mypage');
      }
    }

なにかヒントとなる情報だけでもいただけますと幸いです。
よろしくお願いいたします。

0

1Answer

情報不足の推理

Laravelの欠陥、特性

事象がhttp,HTMLキャッシュクリア漏れに類似

0Like

Comments

  1. @shun123

    Questioner

    返信遅くなり大変申し訳ございません。
    展開いただきました情報を確認させていただきます。

  2. @shun123

    Questioner

    解決しました。

    AuthenticatesUsers
        public function showLoginForm()
        {
            // セッションタイムアウトした時、前回URL情報がセッションに残ってしまう
            // 別アカウントでログインし直した場合も前回URLを参照してしまうため削除する
            if (\Session::has('url.intended')){
                \Session::forget('url.intended');
            }        
            return view('auth.login');
        }
            
    

Your answer might help someone💌