我在[{1}}行动database
时将密码存储在DefaultPasswordHasher
。
我还有另一个更改登录用户密码的操作,在此表单上我有一个名为add
的字段,我需要将其与current_password
的当前密码值进行比较。
问题是database
每次我正在散写表单的值时都会生成不同的哈希值,因此这将永远不会与数据库中的哈希值匹配。
按照'current_password'字段的验证码:
DefaultPasswordHasher
答案 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'