laravel ログイン後、元居たページに遷移させる(Auth)

Auth/LoginController.phpに以下の二つのアクションを追加し、オーバーライドする

    // /vendor/laravel/ui/auth-backend/AuthenticatesUsers.phpにあるshowLoginFormをオーバーライド
   // ログイン画面を表示させるアクション
   public function showLoginForm()
   {
       // $_SERVER->サーバー変数であり、ヘッダ情報やパス情報等を格納しており、この情報はウェブサーバーに依存している->前の画面のリンクを格納している'HTTP_REFERER'や各種サーバーの情報が入っている
       // $_SERVERに'HTTP_REFERER'(前のページのURLを保存する項目)が存在していたら
       if (array_key_exists('HTTP_REFERER', $_SERVER)) {
         // ulr[https://shec003.caelsolus.xyz/show/14]を「scheme->https」「host->shec003.caelsolus.xyz」「pass->/show/14」に分解する
         $path = parse_url($_SERVER['HTTP_REFERER']);  //parse_url-> URL を解釈し、その構成要素(schemeやhost、pass等)を配列で返す
         dd($path);
             if (array_key_exists('host', $path)) {
                 // ホスト部分どうし(リクエストヘッダーのホストとアプリケーションが存在するサーバーのホスト($_SERVER['HTTP_HOST']で取得可能))で比較する。
                 if ($path['host'] == $_SERVER['HTTP_HOST']) { // ホスト部分が自ホストと同じなら
                     session(['url.intended' => $_SERVER['HTTP_REFERER']]);  //sessionに前回のURLを入れておく->下記のredirectPathアクションで使用する
                 }
             }
         }
       // session(['url.intended' => $_SERVER['HTTP_REFERER']]);
       return view('auth.login');
   }
    // ログイン後の遷移先を指定する
   public function redirectPath(){
       $user = Auth::User();
       // 一般ユーザーはログイン画面の前にいた画面へ
       if($user->user_type == UserTypeConst::GENERAL){
           // 上記のshowLoginFormで保存したsesionのurl.intendedにログインする前のurlが入っている
           $path = \Session::pull('url.intended');
           return $path;
       // 管理者ユーザーは管理者ページへ
       }else if($user->user_type == UserTypeConst::ADMIN){
           return '/admin/top';
       }
   }

この記事が気に入ったらサポートをしてみませんか?