1

我正在尝试将 symfony 附带的现有演示登录从 in_memory 修改为用户的数据库存储。我仍然得到:

[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: Cremesk\AgentisBundle\Entity\Pouzivatel, property: meno }

还创建了提到的实体:

'use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Security\Core\User\UserInterface;

 /**
 * Pouzivatel
 *
 * @ORM\Table('pouzivatel')
 * @ORM\Entity
 */
 class Pouzivatel implements UserInterface
 .etc

并保持原样:

 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\Security\Core\SecurityContext;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use JMS\SecurityExtraBundle\Annotation\Secure;


 /**
  * @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);
}
 }

我无法使登录工作。将不胜感激任何帮助。谢谢你。

4

1 回答 1

4

检查用户实体的命名空间和安全配置是否匹配。

namespace Cremesk\AgentisBundle\Entity;

use ....

class Pouzivatel implements UserInterface
{
    ....

在你的 security.yml

providers:
    user_db:
        entity: { class: Cremesk\AgentisBundle\Entity\Pouzivatel, property: meno }
于 2013-03-27T19:32:10.570 回答