我是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('/');
}
感谢您的帮助
答案 0 :(得分: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('/');
}
您可以在上面链接的文档中详细了解这一点。