Symfony Validator - проверяйте длину и содержание пароля ПЕРЕД хэшированием - PullRequest
1 голос
/ 28 октября 2019

Я создал проверку пароля, но когда я вставляю нового пользователя, эта проверка запускается после шифрования пароля ...

Я использую 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'

setMdp в Utilisateur.php:

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

Итак, когда я вставляю нового пользователяЯ получил ошибку от валидатора Symfony, который сказал, что мой пароль превышает 30 символов.

Как я могу запустить этот валидатор перед шифрованием моего пароля?

Спасибо!

1 Ответ

1 голос
/ 29 октября 2019

Ваш подход не верен! Вы должны позволить установить метод как есть:

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(), который является геттером для несопоставленного (в доктрине) свойства сущности, и это единственное задание для этого свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...