Я знаю, что могу использовать этот кодировщик:
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $plainPassword);
Но когда я должен его использовать? Я могу закодировать пароль перед вызовом метода setPassword(). Или я могу закодировать пароль в методе setPassword(). Или, может быть, я должен создать собственный тип данных доктрины, который будет кодировать пароль перед сохранением в базе данных? Или что-то другое? Какой вариант лучше?
Если вы не используете какой-либо комплект для пользователей (например, FOSUserBundle), я бы предложил использовать preInsert
события preInsert
и preUpdate
Таким образом, вы можете централизовать свой код и быть уверенным, что каждый раз, когда пользователь "записывается" в db, ваша операция будет выполнена.
Если $plainPassword
не имеет значения в preUpdate
, возможно, вам нужно выполнить некоторые действия и, в общем, я уверен, вам нужно реализовать некоторую логику, чтобы избежать кодирования уже закодированного пароля
Практика заключается в том, чтобы хранить пароли в БД в зашифрованном виде. Затем во время входа в систему получите пароль от пользователя, зашифруйте его еще раз, прочитайте зашифрованный пароль из БД, сравните два; pass/fail в зависимости от соответствия/несоответствия.