在Symfony2中以编程方式登录自定义实体用户后,“Authenticated No”

时间:2015-07-29 15:58:53

标签: php symfony authentication

以编程方式登录用户:

$user = new CustomEntityUser();
$user->setUsername("foo");
$user->setPassword("bar");

$entityManager->persist($user);
$entityManager->flush();

$token = new UsernamePasswordToken($user, $user->getPassword(), "main", $user->getRoles());
$this->get('security.token_storage')->setToken($token);

未正确验证用户身份。调试栏变为黄色并显示:“Authenticated No”。防火墙的名称为main

user-entity-class根据文档实现了Serializeable - 接口。

1 个答案:

答案 0 :(得分:0)

解决方案是让用户实体类实现Symfony\Component\Security\Core\User\EquatableInterface,例如:

/**
 * {@inheritdoc}
 */
public function isEqualTo(UserInterface $user)
{
    if (! $user instanceof User) {
        return false;
    }

    if ($this->username !== $user->getUsername()) {
        return false;
    }

    if ($this->password !== $user->getPassword()) {
        return false;
    }

    return true;
}

执行此操作后,用户已成功通过身份验证。

如果上述修复无效,请确保数据已正确验证。 E.g:

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=40, unique=true)
 */
private $username;

然后生成一个超过40个字符的用户名仍然会出现同样的问题。