Я пытаюсь создать функцию забытого пароля в моем приложении Symphony 3.1.
У меня есть форма, отправляющая электронное письмо с URL-адресом для сброса пароля, с маркером безопасности.Затем вы получаете простую форму, содержащую ввод пароля.
При отправке я обновляю пароль пользователя на тот, который они отправили, но затем, когда я пытаюсь войти, он говорит, что учетные данные неверны.
Я вижу, что пароль обновляется в базе данных, но я не понимаю, почему он не работает, когда я пытаюсь войти в систему.
Вот код, который обновляет пароль:
// retrieve the user
$user = $this->getDoctrine()->getRepository("AppBundle:User")->findOneBy(array('username' => "admin", "token" => $token));
//the password posted from the form
$password = $request->get('new_password');
$em = $this->getDoctrine()->getManager();
//encoding it according to the symfony doc
//see https://symfony.com/doc/3.1/security/password_encoding.html
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
//updating the password in the database
$user->setPassword($encoded);
$em->persist($user);
$em->flush();
В моем файле security.yaml установлен кодировщик:
encoders:
Symfony\Component\Security\Core\User\User:
algorithm: bcrypt
AppBundle\Entity\User:
algorithm: bcrypt
Брандмауэр в security.yaml:
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: /admin/connexion
check_path: /admin/connexion
logout:
path: /logout
target: /
Свойство пароля в классе User.php:
/**
* @var string
*/
private $password;
Поле пароля в config / doctrine / User.orm.xml:
<field name="password" type="string" column="password" length="64"/>