【问题标题】:Laravel 5.3 Auth:attempt is not workingLaravel 5.3 Auth:尝试不起作用
【发布时间】:2016-09-12 13:25:25
【问题描述】:

不管我插入有效还是无效的凭据,用户总是被重定向到 RedirectIfAuthenticated 中间件中定义的路由。我的问题:如何将经过身份验证的用户重定向到与未经过身份验证的用户不同的路由?

RedirectIfAuthenticated(中间件):

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

        return $next($request);

这是我的登录控制器:

   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');

【问题讨论】:

    标签: php laravel-5 routes


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2017-04-11
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多