2017-02-01 73 views
1

我使用的是Laravel 5.3,想要在登錄後將用戶返回到用戶指定的URL。如何在Laravel中登錄後返回指定的URL?

我使用了很多JavaScript,並且希望在用戶登錄後返回到特定的URL,即不是用戶試圖訪問的URL。URL根據用戶的操作而不同。

例如: /login?r=/come/here/after/login

我這個URL傳遞到登錄界面,但我不能找到一種方法,通過將它傳遞給AUTH控制器重定向後,登錄成功。在App

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 
]; 

,並加入到:

+0

return redirect() - > intended('your-url');在你的身份驗證功能,或者你只是想重定向到URL將只與登錄URL傳遞? – rahulsm

+0

我只是簡單地將它存儲在會話中......(當然,如果用戶打開了多個選項卡,並且觸發了其中多個選項卡的登錄過程,那麼這可能會導致意外的結果,但這有多可能是真的......) – CBroe

回答

1

在你的情況我想創建一個自定義的身份驗證的中間件只是自定義重定向路由你的路線:

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

也許你需要做一個小的改變,但必須工作:)

+0

這不起作用。每個鏈接都不一樣,並且它作爲查詢字符串傳遞 – Mike

+0

@mikemike讓你現在!我更新了。 – Troyer

+0

hmm,'\ Auth :: id()'在中間件內部始終爲'null'。看起來我現在還沒有登錄 – Mike

相關問題