Symfony security.password_encoder isPasswordValid возвращает пустое значение

В Symfony 2.6 я использую следующий метод для кодирования своего пароля. Пароль успешно зашифрован и сохранен в БД.

$encoder = $this->container->get('security.password_encoder');
$encodedPwd = $encoder->encodePassword($adminUser, $plainPassword);

Когда я пытаюсь проверить введенный пользователем пароль, указанный в форме входа, следующим образом:

$adminUser = $this->getDoctrine()->getManager()->getRepository("AcmeUserBundle:AdminUser")->findOneBy(array('username' => $_username));
$_password = $request->request->get('_password');

$encoder = $this->container->get('security.password_encoder');
echo $encoder->isPasswordValid($adminUser, $_password))

Последняя строка всегда возвращается пустой, что означает, что пароль не проверяется. Я получил это из документации Symfony и искал, сталкивался ли кто-нибудь с подобной проблемой, но, похоже, не нашел. Может ли кто-нибудь дать некоторые идеи, пожалуйста?

Спасибо! Шарад


person Sharad    schedule 22.10.2017    source источник


Ответы (1)


Хорошо, я нашел такое решение, и оно работает. Надеюсь, это поможет любому, кто сталкивается с подобной проблемой.

Для кодирования пароля я делаю следующее:

$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$encodedPwd = $encoder->encodePassword($plainPassword, $user->getSalt());

Для проверки пароля я делаю следующее:

$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
echo $encoder->isPasswordValid($user->getPassword(), $_password, $user->getSalt())

При шифровке пароля я не использовал соль, но это важно, теперь все работает.

Спасибо, Шарад.

person Sharad    schedule 23.10.2017