我遇到问题,logout_on_user_change
选项设置为true(这是Symfony 4中的默认行为)。
但只有在运行单元测试时。在我的开发环境中,一切(登录,注销等)都可以正常工作。
但我尝试登录的单元测试失败了。身份验证不再有效。我想用户必须在后台发生一些事情,由于这个选项导致自动注销。
我已根据其中的建议更新了用户实体的serialize()
方法:symfony 3.4 "Refreshing a deauthenticated user is deprecated"
有人遇到同样的问题吗?
问题已解决: 自己找到解决方案: 这使我自己朝着正确的方向前进:Token was deauthenticated after trying to refresh it
值得注意的是,isEqualTo()
中的检查需要使用与serialize()
函数相同的字段:
所以在我的情况下,这适用于启用logout_on_user_change
:
/**
* @see \Serializable::serialize()
*/
public function serialize()
{
return serialize(
array(
$this->id,
$this->email,
$this->password,
$this->salt
)
);
}
/**
* @see \Serializable::unserialize()
*/
public function unserialize($serialized)
{
list (
$this->id,
$this->email,
$this->password,
$this->salt
) = unserialize($serialized, ['allowed_classes' => false]);
}
public function isEqualTo(UserInterface $user)
{
if ($this->id !== $user->getId()) {
return false;
}
if ($this->password !== $user->getPassword()) {
return false;
}
if ($this->salt !== $user->getSalt()) {
return false;
}
if ($this->email !== $user->getEmail()) {
return false;
}
return true;
}