Я недавно начал настраивать безопасность для моего проекта Symfony2. Я решил кодировать с sha256, используя соль. Когда я пытался войти в систему с образцом учетной записи в базе данных (с помощью самосчитанного значения sha256 salt / hash), он продолжал давать сбой без каких-либо сообщений об ошибках, и я не мог понять, почему.
Я решил поместить простой код в метод loginAction () моего контроллера. Это метод, который Symfony2 вызывает, когда пользователь не может войти в систему, используя указанную форму. Я ввел следующий код:
$factory = $this->get('security.encoder_factory');
$em = $this->container->get('doctrine')->getEntityManager();
$userRep = $em->getRepository('MyProjectMyBundle:Users');
$user = $userRep->find(2);
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword('cookie', 'thisisasalt');
$user->setPassword($password);
print($password);
Однако, когда я попытался войти, Symfony2 выдал мне следующую ошибку:
Catchable Fatal Error: Argument 1 passed to Symfony\Component\Security\Core\Encoder\EncoderFactory::getEncoder() must be an instance of Symfony\Component\Security\Core\User\UserInterface, instance of MyProject\MyBundle\Entity\Users given, called in /var/www/Symfony/src/MyProject/MyBundle/Controller/MainController.php on line 35 and defined in /var/www/Symfony/vendor/symfony/src/Symfony/Component/Security/Core/Encoder/EncoderFactory.php line 33
Таким образом, в основном говорится, что аргумент getEncoder()
должен быть экземпляром Symfony\Component\Security\Core\User\UserInterface
. Однако, когда я проверяю MyProject \ MyBundle \ Entity \ Users.php, он начинается со следующих строк:
<?php
namespace MyProject\MyBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
...
Таким образом, класс Users фактически реализует класс UserInterface. Он содержит все функции в классе UserInterface. Я создал все эти файлы так, как сказал мне учебник по Symfony2. По какой причине Symfony2 не распознает мой экземпляр Users как экземпляр UserInterface?
П.С .: База данных была создана кем-то другим, мне просто нужно с ней работать. Таблица Users содержит намного больше информации, чем требуется для UserInterface.