我在数据库中有用户,他们的密码用以下内容加密:
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
用户注册后,用于编码的密码为:
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
$ user来自
$form->handleRequest ( $request );
在表格验证完毕后。在这种情况下,$ password是纯文本。 当它完成后,我在对象中看到哈希字符串:
$ $ 2Y $ 13 DF.Es7XjAQKrRklZXRyLX.YYzRG7gC3XOLA72eul6BEVigMbvir4C
在我的控制器中,当我尝试修改用户密码时,我添加了一个新字段,如下所示:
$form->add ( 'oldpassword', 'password', array('label'=>'old password', 'required'=>true, 'error_bubbling'=>true, 'mapped' => false) );
所以我可以从
达到它的价值$form->get('oldpassword')->getData()
我的目标是在将对象刷新到数据库之前检查已保存的“oldpassword”字段($ user-> getPassword())。
现在,似乎是:
$form->handleRequest ( $request );
if ($form->isSubmitted ()) {
if ( !$functions->passwordVerify($user, $form->get('oldpassword')->getData()) ) {
$form->get ( 'oldpassword' ) ->addError ( new FormError ( "Your current password is invalid" ) );
}
其中$ functions是注入服务的函数:
public function passwordVerify($user=null, $oldpassword=null) {
$encoder = $this->container->get('security.password_encoder');
$valid = $encoder->isPasswordValid($user, $oldpassword);
return $valid;
}
不知何故,$ valid变量总是返回false。 我为“oldpassword”编写的密码与我在注册时使用的密码完全相同(编码器参见上面的代码)。
看起来永远不会生成相同的哈希/令牌......
提前谢谢。