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

Я генерирую случайную строку, которую хочу сохранить или обновить как новый пароль для существующего пользователя в приложении Laravel.

Вот как я делаю это в моем контроллере:

public function changePassword(){

        // Generate new Password
        $newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));

        $user = Auth::user();

        $user->password = bcrypt($newPassword);

        $user->save();

        if(Hash::check($newPassword, $user->password)){

            return response($user);

        }

        return response('Password Mismatched', 401);
    }

Ответ дает мне "Password Mismatched" 401 error.Почему он дает мне несоответствующий пароль?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

В зависимости от того, как настроена ваша модель User, он может автоматически вызывать bcrypt() или Hash::make() для атрибута password, что в сочетании с ручным вызовом функции приводит к "хешухэш "ситуация.Чтобы избежать этого, просто удалите ручной вызов функции и позвольте модели User обрабатывать ее автоматически:

$user = Auth::user();
$user->password = $newPassword;
$user->save();
0 голосов
/ 13 декабря 2018

используйте Hash::make() при сохранении пароля в БД следующим образом:

public function changePassword(){

    // Generate new Password
    $newPassword = bin2hex(openssl_random_pseudo_bytes(16/2, $crypto));

    $user = Auth::user();

    $user->password = Hash::make($newPassword);

    $user->save();

    if(Hash::check($newPassword, $user->password)){

        return response($user);

    }

    return response('Password Mismatched', 401);
}

Это может работать.

...