【问题标题】:Symfony Validator - Check password length and content BEFORE hashingSymfony Validator - 在散列之前检查密码长度和内容
【发布时间】:2020-02-23 20:26:25
【问题描述】:

我创建了一个密码验证,但是当我插入一个新用户时,这个验证是在加密密码后触发的……

我使用的是 Argon2Id,所以密码将超过 30 个字符...

我的验证器(config/validator/validation.yaml):

App\Entity\Utilisateur:
  properties:
    mdp:
      - Length:
          min: 6
          max: 30
          minMessage: 'Votre mot de passe doit faire au moins {{ limit }} caractères'
          maxMessage: 'Votre mot de passe doit faire moins de {{ limit }} caractères'

Utilisateur.php 中的 setMdp :

public function setMdp(string $mdp): self
    {
        $this->mdp = password_hash($mdp, PASSWORD_ARGON2ID);
        return $this;
    }

所以,当我插入新用户时,我收到 Symfony 验证器的错误,告诉我密码超过 30 个字符。

如何在加密密码之前触发此验证器?

谢谢!

【问题讨论】:

    标签: php symfony validation encryption passwords


    【解决方案1】:

    您的方法不正确!您应该让 set 方法保持原样:

    public function setMdp(string $mdp): self
    {
        $this->mdp = $mdp;
        return $this;
    }
    

    相反,您可以在控制器中验证表单后对密码进行编码,如下所示:

    public function createAccount(Request $request, UserPasswordEncoderInterface $passwordEncoder) {
        ...
        $createAccountForm = $this->createForm(CreateAccountFormType::class);
        $createAccountForm->handleRequest($request);
        if ($createAccountForm->isSubmitted() && $createAccountForm->isValid()) {
            $user = $createAccountForm->getData();
            $user->setPassword($passwordEncoder->encodePassword($user, $user->getPlainPassword()));
    
            // flush, persist and other changes
        }
    }
    

    但是,正如您在我的示例中看到的那样,我正在编码 $user->getPlainPassword(),它是未映射(到学说)实体属性的 getter,这是该属性的唯一工作。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2011-05-03
      • 2012-12-19
      相关资源
      最近更新 更多