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';
}
}
この記事が気に入ったらサポートをしてみませんか?