为什么在Laravel中密码哈希行为如此奇怪?

时间:2019-06-22 21:50:00

标签: php laravel hash laravel-5.8 tinker

我正在为博客使用Laravel 5.8。我正在尝试创建用户身份验证API。我有一个带有三个字段(名称,电子邮件,密码)的用户模型。 出于测试目的,我使用laravel tinker创建用户。我已使用以下命令创建新用户:

$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.19-0ubuntu0.18.04.1 — cli) by Justin Hileman
>>> $u = new App\User()
=> App\User {#2989}
>>> $u->name = 'Sanket'
=> "Sanket"
>>> $u->email = 'sanket@sanket.com'
=> "sanket@sanket.com"
>>> $u->password = Hash::make('sanket')
=> "$2y$10$NbF1pA0T8cc6orqUcR2u/.FR0iw5mqNW8D3XO3/GfSrsns6VI8WKO"
>>> $u->save()
=> true

现在,当我尝试使用Hash :: check()验证密码时,它总是返回false。

>>> Hash::check('sanket', $u->password)
=> false

我不知道为什么这次会发生这种情况。我已经研究过Laravel 5.6。它从来没有给我这样的错误。

我尝试使用以下不同方法进行验证:

  1. 首先,我在修补程序中使用以下命令检索了用户:

    >>> $u = User::where('email', 'sanket@sanket.com')->first()
    [!] Aliasing 'User' to 'App\User' for this Tinker session.
    => App\User {#3015
         id: 31,
         name: "Sanket",
         email: "sanket@sanket.com",
         created_at: "2019-06-23 02:49:40",
         updated_at: "2019-06-23 02:49:40",
         deleted_at: null,
         isAdmin: null,
       }
    
  2. 然后我检查了密码

    >>> $u->password 
    => "$2y$10$U15hLUgd/X4a5hOuR78RKuo86jvzIerCJqjvg0fIJ8toqIUGZnreW"
    
  3. 然后我创建了一个变量来存储哈希密码

    >>> $hash = Hash::make('sanket')
    => "$2y$10$onDN6nLW0e1IMLJOl77rWuC9ZQHMwPZKSFn5ok/kfcepRGZuufjWS"
    
  4. 然后我尝试将此哈希设置给用户

    >>> $u->password = $hash
    => "$2y$10$onDN6nLW0e1IMLJOl77rWuC9ZQHMwPZKSFn5ok/kfcepRGZuufjWS"
    >>> $u->save()
    => true
    

但是现在散列密码不同于步骤2和步骤3

    >>> $u->password
    => "$2y$10$CkkCEUkS16ZPW4takJdl.e7uKvJWgiAOGEmUBgeFYtjHJ036lHW3y"

我也尝试了以下方法,并且可以按预期工作。

    >>> Hash::check('sanket', Hash::make('sanket'))
    => true

仅当我将哈希密码分配给用户时,问题才会出现。

怎么了?

0 个答案:

没有答案