gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:25:44 25 4
gpt4 key购买 nike

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

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



在我的 Controller 中,当我尝试修改用户密码时,我添加了一个新字段,如下所示:
$form->add ( 'oldpassword', 'password', array('label'=>'old password', 'required'=>true, 'error_bubbling'=>true, 'mapped' => false)  );

所以我可以从
$form->get('oldpassword')->getData()

我的目标是在将对象刷新到数据库之前检查“旧密码”字段与保存的字段 ($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 是注入(inject)服务的函数:
    public function passwordVerify($user=null, $oldpassword=null) {
$encoder = $this->container->get('security.password_encoder');
$valid = $encoder->isPasswordValid($user, $oldpassword);
return $valid;
}

不知何故,$valid 变量总是返回 false。
我为“oldpassword”编写的密码与我在注册时使用的密码完全相同(编码器参见上面的代码)。

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

先感谢您。

最佳答案

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

关于forms - 通过验证更改用户密码( symfony2 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com