Symfony 2登录表单无法登录

时间:2014-05-28 05:02:27

标签: php symfony login-control

我正在创建一个连接到用户表的登录表单。但是,当我提交登录表单时,它会生成此消息“用户提供程序必须返回UserInterface对象。

我已经从user.orm.yml创建了用户实体我错过了什么???

Security.yml

安全性:

encoders:
    ESS\UserBundle\Entity\User: 
        algorithm: plaintext
        encode-as-base64: true
        iterations: 1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    administrators:
        entity: { class: ESSUserBundle:User}

UserRepository类

namespace ESS\UserBundle\Repository;

use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;

class UserRepository extends EntityRepository implements UserProviderInterface
{
    public function loadUserByUsername($username)
    {
        $q = $this
            ->createQueryBuilder('u')
            ->where('u.username = :username OR u.email = :email')
            ->setParameter('username', $username)
            ->setParameter('email', $username)
            ->getQuery();

        try {
            // The Query::getSingleResult() method throws an exception
            // if there is no record matching the criteria.
            $user = $q->getSingleResult();
        } catch (NoResultException $e) {
            $message = sprintf(
                'Unable to find an active admin AcmeUserBundle:User object identified by "%s".',
                $username
            );
            throw new UsernameNotFoundException($message, 0, $e);
        }

        return $user;
    }

    public function refreshUser(UserInterface $user)
    {
        $class = get_class($user);
        if (!$this->supportsClass($class)) {
            throw new UnsupportedUserException(
                sprintf(
                    'Instances of "%s" are not supported.',
                    $class
                )
            );
        }

        return $this->find($user->getId());
    }

    public function supportsClass($class)
    {
        return $this->getEntityName() === $class
            || is_subclass_of($class, $this->getEntityName());
    }
}

用户实体类

namespace ESS\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * User
 * 
 * 
 */
class User
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $username;

    /**
     * @var string
     */
    private $name;

1 个答案:

答案 0 :(得分:3)

问题是您的用户实体本身需要实现Symfony2的用户界面。 http://api.symfony.com/2.0/Symfony/Component/Security/Core/User/UserInterface.html

将其添加到实体文件的顶部。

use Symfony\Component\Security\Core\User\UserInterface; 



class User implements UserInterface {

然后在界面中实现方法。

Symfony的安全组件要求用户实现此接口以便能够对其进行身份验证。

相关问题