2016-09-12 97 views
0

无论如何,如果我插入有效或无效的凭据,用户总是重定向到RedirectIfAuthenticated中间件中定义的路由。我的问题:我如何将认证用户重定向到不同于非认证用户的路由?Laravel 5.3身份验证:尝试不起作用

RedirectIfAuthenticated(中间件):

public function handle($request, Closure $next, $guard = null) 
    { 
     if (Auth::guard($guard)->check()) { 
      return redirect('/'); 
     } 

     return $next($request); 

这是我的LoginController:

public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 

public function authenticate(Request $data){ 
    if (Auth::attempt(['cnpj' => $data['cnpj'], 'password' => $data['password'] ])){ 
     return redirect()->route('someroute'); 
    } 
    else{ 
     return redirect()->route('login'); 

    } 

路线:

Route::get('/', function() { 
    return view('welcome'); 
}) -> name('/'); 

Route::post('/register', 'Auth\[email protected]'); 

Route::get('/register', function() { 
    return view('auth.register'); 
}); 

Route::get('/login', function(){ 
    return view('auth.login'); 
})->name('login'); 

Route::post('/login', 'Auth\[email protected]'); 

回答

1

在你LoginController,你已经设置了guest中间件应用到除logout之外的所有路线。这意味着经过身份验证的用户无法访问authenticate方法,因为中间件已经运行并重定向了用户。

最简单的解决将是该authenticate方法添加到排除的guest中间件:

public function __construct() 
{ 
    $this->middleware('guest', ['except' => ['logout', 'authenticate']]); 
} 

这似乎从你的问题,你真的不明白中间件的Laravel的概念,路由和身份验证。我强烈建议您重新阅读有关这些功能的文档,因为它看起来像是在尝试手动实现框架中已有的功能。