Laravel 5.3 Auth:尝试不起作用

时间:2016-09-12 13:25:26

标签: php laravel-5 routes

如果我插入有效或无效的凭据,则无关紧要,用户始终会重定向到RedirectIfAuthenticated中间件中定义的路由。我的问题:如何将经过身份验证的用户重定向到与未经过身份验证的用户不同的路由?

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\RegisterController@create');

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

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

Route::post('/login', 'Auth\LoginController@authenticate');

1 个答案:

答案 0 :(得分:1)

LoginController中,您已将guest中间件设置为适用于除logout之外的所有路由。这意味着经过身份验证的用户永远无法访问authenticate方法,因为中间件已经运行并已重定向用户。

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

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

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