Логин пользователя не работает после обновления пароля - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать функцию забытого пароля в моем приложении 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"/>

1 Ответ

0 голосов
/ 14 февраля 2019

Проблема была от моих провайдеров: у меня было два провайдера, один для пользователей, пришедших из базы данных, и один для пользователя с жестким кодом in_memory, и я забыл создать провайдера цепочки, как описано здесь: symfony.com /док / 3,1 / безопасность / multiple_user_providers.html

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