2017-02-01 1 views
1

私はLaravel 5.3を使用しており、ログイン後にユーザがユーザ指定のURLに戻るようにしたいと考えています。Laravelにログインした後、指定したURLに戻るにはどうしたらいいですか?

多くのJavaScriptを使用しており、ユーザーがログインしようとしているURLではなく、特定のURLに戻る必要があります.URLはユーザーの操作によって異なります。例えば

/login?r=/come/here/after/login

私は、ログイン画面にこのURLを渡すことができますが、私は、ログインが成功した後のリダイレクトのための認証コントローラにそれを通過する方法を見つけることができません。あなたのケースでは、私はちょうどカスタムリダイレクトルートのカスタム認証ミドルウェアを作成します

+0

returnリダイレクト() - >意図( 'your-url');あなたの認証機能で、または単にあなたがログインURLだけで渡されるURLにリダイレクトしたいのですか? – rahulsm

+0

私は単純にそれをセッションに保存したいと思います(ユーザーが複数のタブを開いていて、複数のタブでログインプロセスを起動すると、予期しない結果になる可能性があります。 – CBroe

答えて

1

class PostLoginRedirect 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 

     $response = $next($request); 

     if (\Auth::id() && isset($request->r)) { 
      // Return the new route redirect. 
      return redirect($request->r); 
     } 

     // Return the custom one in case r? don't exists. 
     return $response; 
    } 
} 

アプリ/ HTTP/Kernel.php

protected $routeMiddleware = [ 
    'login-redirect' => \YourNamespace\PostLoginRedirect::class 
]; 

にあなたの新しいミドルウェアを宣言しに追加あなたのルート:

$this->post('login', ['middleware' => 'login-redirect', 'uses' => 'Auth\[email protected]']); 

多分あなたはマイナーチェンジをする必要がありますが、作業する必要があります:)

+0

これはうまくいかないでしょう。すべてのリンクで違っていて、クエリ文字列として渡されました – Mike

+0

@mikemikeがあなたを今すぐ見つけました!私は更新しました。 – Troyer

+0

hmm、 '\ Auth :: id()'はミドルウェア内部で常に 'null'です。私はこの時点でログインしていないように見えます – Mike

関連する問題