1

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: 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 に答える