Posted at

LaravelでログインしてそのままそのURLに進む方法

Laravelでログイン後に元の画面に戻る方法は探せばそれなりに出てくるけど、

ログイン後に行こうとしてたURLにそのまま行く方法がなかなか見つからなかったので、自己解決した結果を書いておきます。

考え方としてはログイン画面を開く直前に、行こうとしてるURLを残しておいて、ログイン後そこに戻る、という手法を取ります。

さて、未ログインのままログインが必要な画面に行こうとするときにはAuthenticateミドルウェアを通るため、ここでログイン画面へ行こうとするときにURLを保存します。

このとき、URLはセッションに保存しておきます。


app/Http/Middleware/Authenticate.php

    protected function redirectTo($request)

{
if (! $request->expectsJson()) {
session(['url.intended' => url()->current()]);
return route('login');
}
}

そしてLoginControllerのredirectPath()でセッションを見て、

保存されていたURLにリダイレクトすることで、もともと行こうとしてたURLに行けます。


app/Http/Controllers/Auth/LoginController.php

    public function redirectPath()

{
return session('url.intended') ?: $this->redirectTo;
}

public function showLoginForm()
{
if (empty(session('url.intended'))) {
session(['url.intended' => url()->previous()]);
}
return view('auth.login');
}


ちなみにこのLoginControllerでは、「ログイン後に元の画面に戻る」もやりたいので、

showLoginForm()で、セッションが空の場合にリファラーを指定してます。