通过验证更改用户密码(symfony2)

时间:2015-06-06 09:37:46

标签: forms validation security symfony passwords

我在数据库中有用户,他们的密码用以下内容加密:

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”编写的密码与我在注册时使用的密码完全相同(编码器参见上面的代码)。

看起来永远不会生成相同的哈希/令牌......

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您应该尝试使用内置的UserPassword验证器约束,它专为此任务而设计。

相关问题