Hash :: check()在laravel 5中返回false

时间:2016-04-15 15:28:46

标签: laravel authentication laravel-5

我刚开始使用laravel 5,我正在做一个简单的登录功能来检查用户传递的电子邮件和密码是否与存储在数据库中的电子邮件和密码匹配。我一直在阅读文档([duplicate question https://laravel.com/docs/5.0/hashing),但Hash::check($content['password'], $user->{'password'})始终返回false。我的代码看起来像这样。

当我创建一个新用户时,我会像这样对密码进行哈希:

$content = json_decode($request->getContent(), true);

$user -> password = Hash::make($content['email']);

我的登录功能如下:

public function login(Request $request)
{
    $content = json_decode($request -> getContent(), true);

    $user = DB::table('users')->where('email', $content['email'])->first();


    if (Hash::check($content['password'], $user->{'password'}))
    {
       // Redirect to dashboard
    }
}

提前致谢!!

3 个答案:

答案 0 :(得分:0)

我提出了同样的问题。检查数据库用户表,密码字段。使字段的大小为60或更多。这个固定的矿井。

答案 1 :(得分:0)

Facade Hash只会加密您的数据:

Hash::make('123456');

与:

相同
$password = bcrypt('123456');

登录用户需要使用AuthController功能:

Auth::attempt(['email' => 'test@test.com' , 'password' => Hash::make('password')]);

这是一个例子。

如果您收到了请求,可以将此方法添加到登录名单中:

if(Auth::attempt(['email'   =>  $request->email, 'password'    =>  $request->password , 'active'    =>  1])){
        flash()->success('Successfully logged in!');
        return redirect('/');
}

尝试功能将对您的密码字段进行哈希处理,并与数据库数据进行比较。

答案 2 :(得分:0)

实际上,在创建用户时,您正在散列电子邮件而不是密码。从

更改代码
$user->password = Hash::make($content['email']);

$user->password = Hash::make($content['password']);