0

我想知道是否有可能使我的每個控制器的身份驗證重定向不同?目前,一切都重定向到/ home。這是爲我的HomeController設計的。但對於ClientController,我希望它重定向到/客戶端(如果通過身份驗證)而不是/ home。我是否必須爲每個控制器創建一個新的中間件,或者是否有辦法通過重用auth來完成此操作?Laravel 5.2如何根據控制器更改RedirectIfAuthenticated的重定向?

RedirectIfAuthenticated.php

if (Auth::guard($guard)->check()) { 
    return redirect('/home'); //anyway to change this to /client if coming from ClientController? 
} 

我有這對我的ClientController.php

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

提前感謝!對Laravel和中間件來說相當新穎。

回答

0

沒關係,我能夠通過正確的路由工作。 在web中間添加ClientController,負責所有的身份驗證。

Route::group(['middleware' => ['web']], function() { 
    Route::resource('client', 'ClientController'); 
} 

而且在 ClientController.php,增加可使用auth中間件。

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

public function index() 
{ 
    return view('client'); 
} 
0

User模型只需使用這樣的:

protected $redirectTo = '/client'; 

您還可以通過更改Laravel的核心文件,實現這一目標。如果您正在使用Laravel 5.2去project_folder\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RedirectsUsers.php

您可以找到下面的代碼:

public function redirectPath() 
{ 
    if (property_exists($this, 'redirectPath')) { 
     return $this->redirectPath; 
    } 

    return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; //Change the route in this line 
} 

現在,改變/home/client。不過,我建議不要更改核心文件。你可以使用第一個。

+0

嘗試過,但它不會改變一件事,加$ redirectTo ='/ client';在我的用戶模型上。一切工作正常,只要放置Route :: resource('client','ClientController');在Route :: group(['middleware'=> ['web']],在routes.php中的function(){ } –