无法使用Laravel Auth :: Atempt对用户进行身份验证

时间:2017-09-13 12:54:25

标签: laravel authentication

我正在努力寻找原因,但不能。它总是对“别的”失败。我正在使用sqlite,这是我的代码:

public function doLogin(Request $request)
{
    $email          = $request['email'];
    $password       = $request['password'];

    if ( Auth::attempt(['email' => $email, 'password' => $password]) )
        return redirect()->route('home');
    return redirect()->back(); 
}  

路线

Route::post('/doLogin',['as' => 'doLogin', 'uses' => 'Auth\LoginController@doLogin']); 

已经打印了变量,这些值与数据库完全相同。

可能的问题原因?

测试可变接收值(打印正确的值)

$usuario = \App\User::find(1)->pluck('email', 'password');  
return ($usuario);  

印刷值:

  

{ “teste123”: “teste@teste.com”}

另外,如果我试试这个:

public function doLogin(Request $request)
{
    $email          = $request->input('email');
    $password       = $request->input('password');

    dd($request->all());

}  

我明白了:

array:4 [▼
  "_token" => "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
  "email" => "teste@teste.com"
  "password" => "teste123"
  "action" => null
]  

这是正常的action = null吗?

1 个答案:

答案 0 :(得分:2)

看起来您将密码以明文形式存储在数据库中,这似乎是个问题。您永远不应该这样做,就像您有安全漏洞一样,然后渗透者可以轻松访问您所有用户的密码。

这也似乎是你的Auth::attempt失败的原因。 Auth::attempt进入SessionGuard.php,最终从EloquentUserProvider.php调用validateCredentials。此函数会对给定的密码进行哈希处理,并根据数据库中的内容进行检查。 Laravel希望对数据库中的密码进行哈希处理(默认情况下是bcrypt),因此密码不匹配。它会对$request中的明文密码进行哈希处理,因此它不再与数据库中的纯文本匹配。

Laravel comes with the command php artisan make:auth.如果您使用此功能,那么您不必执行doLogin功能。您只需沿默认路由发送登录信息即可。然后,当您进行测试时,请通过注册注册您的帐户,以确保它以散列形式保存在您的数据库中,而不是明文。