DefaultPasswordHasher为相同的值生成不同的哈希值

时间:2015-04-07 19:05:51

标签: php cakephp-3.0

我在[{1}}行动database时将密码存储在DefaultPasswordHasher

我还有另一个更改登录用户密码的操作,在此表单上我有一个名为add的字段,我需要将其与current_password的当前密码值进行比较。

问题是database每次我正在散写表单的值时都会生成不同的哈希值,因此这将永远不会与数据库中的哈希值匹配。

按照'current_password'字段的验证码:

DefaultPasswordHasher

1 个答案:

答案 0 :(得分:13)

这就是bcrypt的工作方式。 Bcrypt是一种更强大的密码散列算法,可根据当前系统熵为相同值生成不同的散列,但能够比较原始字符串是否可以散列为已经散列的密码。

要解决您的问题,请使用check()功能代替hash()功能:

 ->add('current_password', 'custom', [
        'rule' => function($value, $context){
            $user = $this->get($context['data']['id']);
            if ($user) {
                if ((new DefaultPasswordHasher)->check($value, $user->password)) {
                    return true;
                }
            }
            return false;
        },
        'message' => 'Você não confirmou a sua senha atual corretamente'