首页 文章

Laravel Auth ::登录($ user)无法正常工作

提问于
浏览
0

我是laravel的新手 . 我正在尝试登录用户,但每次都会收到以下错误:

SessionGuard.php第439行中的ErrorException:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须是Illuminate \ Contracts \ Auth \ Authenticatable的一个实例,给出的数组

这是我的表格:

<form class="form-horizontal" method="post" action="{{ route('login') }}">
{{ csrf_field() }}
      <input type="email" class="form-control" name="email" id="email"><br>
      <input type="password" class="form-control" name="password" id="password"><br>
      <button type="submit" class="btn btn-default">Sign in</button>
</form>

这是我的路线:

Route::post('login/', ['as' => 'login', 'uses' => 'UsersController@login']);

UsersController 中的登录方法:

public function login(Request $request){
    $this->validate($request, ['email' => 'required|email', 'password' => 'required']);
    $user = $request->all();
    Auth::login($user);
    return redirect('/');
}

谢谢你的帮助

1 回答

  • 1

    如果您想要登录用户,则需要使用 Auth::attempt() 而不是 Auth::login() .

    Auth :: attempt()接受键/值对数组作为其第一个参数 . 数组中的值将用于查找数据库表中的用户 .

    所以在你的代码中这将是:

    public function login(Request $request){
        $this->validate($request, ['email' => 'required|email', 'password' => 'required']);
        $user = $request->all();
        Auth::attempt($user);
        return redirect('/');
    }
    

    您可以使用Auth::login()手动将现有用户登录到您的应用程序中 . 提供的对象需要是 Illuminate\Contracts\Auth\Authenticatable 的实现,它已在默认的 App\User 模型中实现 . 例如,这可能如下所示:

    public function manualLogin(){
        $user = User::find(1);
        Auth::login($user);
        return redirect('/');
    }
    

    您可以在上面链接的文档中阅读有关此内容的更多信息 .

相关问题