LoginSignup
1
4

More than 3 years have passed since last update.

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

Posted at

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()で、セッションが空の場合にリファラーを指定してます。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4