Auth ::如何在Laravel中尝试检查密码?

时间:2017-08-19 06:35:46

标签: php authentication hash laravel-5.4 bcrypt

我正在使用Laravel 5.4。我知道哈希是一种方式。正如我记得的那样,我将密码删除并保存在数据库中,当我想检查用户密码时,我会将输入的密码哈希并在数据库中使用散列字符串进行检查。

在laravel我只需要写下面的代码:

 $email = $request['email'];
 $pass = $request['password'];

 if(Auth::attempt(['email'=> $email , 'password' => $pass])){
       //return something
   } 

无需bcrypt($request['password']);

尽管我必须使用bcrypt,但哈希字符串会有所不同。

如何Auth::attempt使用bcrypt密码密码来检查密码。

我需要解释Auth::attempt在使用bcrypt时的工作原理。我知道如何实现代码并检查密码。

2 个答案:

答案 0 :(得分:0)

如果您使用的是Laravel应用程序附带的内置LoginControllerRegisterController类,则会自动使用Bcrypt进行注册和身份验证。

有关详细信息,请参阅此链接:https://laravel.com/docs/5.4/hashing

Laravel使用的散列方法每次都会生成一个不同的散列(即使对于相同的字符串)。它不会散列两个字符串并进行比较,而是使用未散列的字符串与散列进行比较。

check方法允许您验证给定的纯文本字符串是否与给定的哈希相对应。但是,如果您使用Laravel附带的LoginController,则可能不需要直接使用它,因为此控制器会自动调用此方法:

if (Hash::check('plain-text', $hashedPassword)) {
    // The passwords match...
}

答案 1 :(得分:0)

Laravel使用bcrypt来哈希密码。每次使用bcrypt都会产生随机盐。这就是我们提供相同的string时获得不同哈希值的原因。

我们如何比较两个哈希?

随机盐会保存在旁边:

[full hash] = [random-salt-part]+[hashed-string-with-random-salt]

因此,为了进行比较,我们应该使用保存的随机盐部分而不是随机盐。这样我们将拥有相同的哈希值。

为什么要使用随机盐? 简而言之:为了防止被彩虹桌弄碎的可能性。 有关更详细的答案,请访问:https://security.stackexchange.com/questions/66989/how-does-a-random-salt-work