symfony 4 php password_verify无法正常工作

问题描述 投票:0回答:1

我正在使用Symfony 4.3开发应用程序。我目前正在使用一种功能来修改用户的密码,为此,我首先要在确认用户知道他的密码后再进行更改。我是通过在表单类型中键入其当前密码的值来实现的。但是,php password_verify函数似乎无法识别用户想要更改的实际密码。我正在使用symfony表单构建器,该构建器允许我获取值而无需自己明确设置它们。我们能够正确地恢复用户密码和哈希值,但是该函数始终返回false。我正在使用“自动”算法来加密security.yaml中的密码。

我已经尝试了一切,从使用单引号到双引号,从使用纯文本作为单词密码和它的编码版本(如so:password_verify('password','encoded_version')),或者动态使用该功能。以下是我编写的一些代码。如前所述,我正在使用symfony表单生成器。

输入密码的形式

class PasswordUpdateType extends AbstractType
{

    /**
     * Permet d'avoir la configuration d'un chanmp
     *
     * @param string $label
     * @param string $placeholder
     * @return array $options
     * @return array
     */
    private function getConfiguration($label, $placeholder, $options = []) {
        return array_merge([
            'label' => $label,
            'attr'=>[
                'placeholder'=>$placeholder
            ]
        ], $options);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('oldPassword', PasswordType::class, $this->getConfiguration("Ancien mot de passe","Saisier le mot de passe actuel"))
        ->add('newPassword', PasswordType::class, $this->getConfiguration("Nouveau mot de passe","Saisier le mot de passe actuel"))
        ->add('confirmPassword', PasswordType::class, $this->getConfiguration("Confirmer le mouveau mot de passe","Saisier le mot de passe actuel"))
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => PasswordUpdate::class,
        ]);
    }
}

验证密码匹配的代码

public function updatePassword(Request $request, UserPasswordEncoderInterface $encoder, ObjectManager $manager) {
        $passwordUpdate = new PasswordUpdate();
        $user=$this->getUser();

        $form = $this->createForm(PasswordUpdateType::class, $passwordUpdate);

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()) { 

            if(!password_verify($passwordUpdate->getOldPassword(),$user->getPassword())) {
                $form->get('oldPassword')->addError(new FormError("Le mot de passe saisi n'est pas le mot de passe actuel")); 
                //dump($passwordUpdate->getOldPassword());
                //dump(password_verify($passwordUpdate->getOldPassword(),$user->getPassword()));
                dump($passwordUpdate->getOldPassword());
                dump($encoder->encodePassword($user,$passwordUpdate->getOldPassword()));
                dump(gettype($user->getPassword()));
                dump(password_get_info($passwordUpdate->getOldPassword()));
                die();


            }

尽管我的转储正在工作,但我总是处于密码不匹配的状态,这意味着信息正在恢复。谢谢!

php symfony security change-password password-hash
1个回答
0
投票
public function __construct(UserPasswordEncoderInterface $passwordEncoder) { $this->passwordEncoder = $passwordEncoder; } public function updatePassword(..) { // .... if(!$this->passwordEncoder->isPasswordValid($user, $password)) { }
© www.soinside.com 2019 - 2024. All rights reserved.