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

A. *_*ola 2 authentication laravel-5 laravel-5.2

我是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>
Run Code Online (Sandbox Code Playgroud)

这是我的路线:

Route::post('login/', ['as' => 'login', 'uses' => 'UsersController@login']);
Run Code Online (Sandbox Code Playgroud)

和登录方法UsersController

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

谢谢你的帮助

Jam*_*mes 6

如果您想登录用户,那么您想使用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('/');
}
Run Code Online (Sandbox Code Playgroud)

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

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

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