[解決済み】Laravel ログイン後、元の宛先にリダイレクトする。
質問
これはかなり基本的な流れのように思えますし
Laravel
には基本的なことについての素晴らしいソリューションがたくさんあるので、何か足りないような気がするんです。
ユーザーが認証を必要とするリンクをクリックした場合。 Laravelの オート フィルターが作動し、ログインページにルーティングされる。 ユーザーはログインした後、「auth」フィルターが作動する前にアクセスしようとした元のページに移動します。
元々どのページにアクセスしようとしていたのかを知る良い方法はないでしょうか? Laravelはリクエストをインターセプトするものなので、ユーザーがログインした後に簡単にルーティングできるように、どこかに記録を残しているかどうかはわかりませんでした。
もしそうでなければ、手動でどのように実装された方がいらっしゃるか、お聞きしたいです。
どのように解決するのですか?
Laravel 5.3以上の場合
確認 スコットの回答 の下にあります。
Laravel5から5.2までの場合
簡単に言うと
認証ミドルウェアについて。
// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
return redirect()->guest('login');
}
return $next($request);
ログイン時の動作。
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('defaultpage');
}
Laravel 4の場合(古い回答)
この回答の時点では、フレームワーク自体からの公式サポートはありませんでした。現在では
bgdrl氏が指摘した方法は以下の通りです。
という方法があります。
(彼の回答を更新してみましたが、受け入れてもらえないようです)
Authフィルターについて。
// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
if (Auth::guest()) {
return Redirect::guest('login');
}
});
ログイン時の動作。
// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
return Redirect::intended('defaultpage');
}
Laravel3(さらに古い回答)の場合
このように実装することができます。
Route::filter('auth', function() {
// If there's no user authenticated session
if (Auth::guest()) {
// Stores current url on session and redirect to login page
Session::put('redirect', URL::full());
return Redirect::to('/login');
}
if ($redirect = Session::get('redirect')) {
Session::forget('redirect');
return Redirect::to($redirect);
}
});
// on controller
public function get_login()
{
$this->layout->nest('content', 'auth.login');
}
public function post_login()
{
$credentials = [
'username' => Input::get('email'),
'password' => Input::get('password')
];
if (Auth::attempt($credentials)) {
return Redirect::to('logged_in_homepage_here');
}
return Redirect::to('login')->with_input();
}
リダイレクトをSessionに保存することで、ユーザーが認証情報を打ち間違えた場合や、アカウントを持っておらずサインアップしなければならない場合でも、リダイレクトを持続させることができるという利点があります。
また、Auth 以外のものでも、セッションにリダイレクトを設定すれば、魔法のように動作するようになります。
関連
-
[解決済み] Class 'AppHttpControllers</DB' not found in Laravel 5 Controller
-
[解決済み] 未定義のメソッドIlluminateFoundationApplication::bindShared()への呼び出し。
-
[解決済み] Laravelをアンインストールするには?
-
[解決済み] Laravelをインストールする際にエラーが発生しました。"./composer.json is not writable." というエラーが出ました。
-
[解決済み] htmlentities() はパラメータ 1 が文字列であることを予期しており、オブジェクトが与えられている
-
タイプエラーです。Too few arguments to function IlluminateSupport ゙Manager::createDriver()
-
[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法
-
[解決済み】マイグレーション。外部キー制約を追加できない
-
[解決済み】Laravel Redirect Back with()メッセージ
-
[解決済み】Laravel ログイン後、元の宛先にリダイレクトする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未定義のメソッドIlluminateFoundationApplication::bindShared()への呼び出し。
-
[解決済み] ホームステッドインストール
-
[解決済み] htmlentities() はパラメータ 1 が文字列であることを予期しており、オブジェクトが与えられている
-
[解決済み] Laravel Homesteadを使用しています。'入力ファイルが指定されていない'
-
[解決済み] Laravel、each()関数でできることは?
-
laravelがWhoopsでサーバーにアップロード、何かが間違っていたようです。
-
[解決済み】Laravel 5 - artisan seed 【ReflectionException】クラスSongsTableSeederが存在しない。
-
[解決済み】laravel eloquentで特定の列を選択する方法
-
[解決済み】 ~/.composer/vendor/bin ディレクトリを PATH に配置する方法は?
-
[解決済み】Laravel ログイン後、元の宛先にリダイレクトする。