Вопрос:
Я пытаюсь изменить существующий демо-логин, который поставляется с symfony, от in_memory до db-хранилища пользователей. Я все еще получаю:
[2013-03-27 19:24:34] security.INFO: Authentication request failed: The user provider must return a UserInterface object. [] []
Поэтому я изменил:
security.yml
providers: user_db: entity: { class: CremeskAgentisBundleEntityPouzivatel, property: meno }
Также создано упомянутое Сущность:
‘use DoctrineORMMapping as ORM; use SymfonyComponentSecurityCoreUserUserInterface; /** * Pouzivatel * * @ORMTable(‘pouzivatel’) * @ORMEntity */ class Pouzivatel implements UserInterface .etc
и левый контроллер, как это было:
use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentSecurityCoreSecurityContext; use SensioBundleFrameworkExtraBundleConfigurationRoute; use SensioBundleFrameworkExtraBundleConfigurationTemplate; use JMSSecurityExtraBundleAnnotationSecure; /** * @Route(«/demo/secured») */ class SecuredController extends Controller { /** * @Route(«/login», name=»_demo_login») * @Template() */ public function loginAction() { if ($this->get(‘request’)->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { $error = $this->get(‘request’)->attributes->get(SecurityContext::AUTHENTICATION_ERROR); } else { $error = $this->get(‘request’)->getSession()->get(SecurityContext::AUTHENTICATION_ERROR); } return array( ‘last_username’ => $this->get(‘request’)->getSession()->get(SecurityContext::LAST_USERNAME), ‘error’ => $error, ); } /** * @Route(«/login_check», name=»_security_check») */ public function securityCheckAction() { // The security layer will intercept this request } /** * @Route(«/logout», name=»_demo_logout») */ public function logoutAction() { // The security layer will intercept this request } /** * @Route(«/hello», defaults={«name»=»World»}), * @Route(«/hello/{name}», name=»_demo_secured_hello») * @Template() */ public function helloAction($name) { return array(‘name’ => $name); } /** * @Route(«/hello/admin/{name}», name=»_demo_secured_hello_admin») * @Secure(roles=»ROLE_ADMIN») * @Template() */ public function helloadminAction($name) { return array(‘name’ => $name); } }
Я не могу заставить войти работать. Поблагодарите любую помощь. Спасибо.
Лучший ответ:
Проверьте пространство имен вашего пользовательского объекта и соответствие конфигурации безопасности.
namespace CremeskAgentisBundleEntity; use …. class Pouzivatel implements UserInterface { ….
и в вашем security.yml
providers: user_db: entity: { class: CremeskAgentisBundleEntityPouzivatel, property: meno }