以编程方式登录用户:
$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
- 接口。
答案 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个字符的用户名仍然会出现同样的问题。