为什么 Laravel `bcrypt` 或 Hashing a random string password 在检查时不匹配?

Why Laravel `bcrypt` or Hashing a random string password is mismatched when checking?

我正在生成一个随机字符串,我想将其保存或更新为 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。为什么 是不是它给了我一个不匹配的密码?

像这样将密码保存到数据库时使用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);
}

这可能有效。

根据您的 User 模型的设置方式,它可能会自动调用 password 属性上的 bcrypt()Hash::make(),当与手动结合使用时调用该函数会导致 "hash of a hash" 情况。为避免这种情况,只需删除对该函数的手动调用并允许 User 模型自动处理它:

$user = Auth::user();
$user->password = $newPassword;
$user->save();