Почему хэши паролей ведут себя так странно в Laravel? - PullRequest
0 голосов
/ 23 июня 2019

Я использую 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

Проблема возникает только тогда, когда я назначаю хешированный пароль пользователю.

Что не так?

...