正在更新当前Symfony用户,正在尝试创建
我将Symfony 4设置为使用SAML登录系统。当使用SAML对用户进行身份验证时,如果用户已经存在或持续存在,UserFactory将从数据库中获取该用户,并刷新新的用户实体 在控制器中,我尝试使用一些简单的代码:正在更新当前Symfony用户,正在尝试创建,symfony,security,doctrine,token,saml,Symfony,Security,Doctrine,Token,Saml,我将Symfony 4设置为使用SAML登录系统。当使用SAML对用户进行身份验证时,如果用户已经存在或持续存在,UserFactory将从数据库中获取该用户,并刷新新的用户实体 在控制器中,我尝试使用一些简单的代码: $user = $this->getUser(); // Returns an App\User\Entity object $user->setFirstName('Test'); $this->em->persist($user); $this->
$user = $this->getUser(); // Returns an App\User\Entity object
$user->setFirstName('Test');
$this->em->persist($user);
$this->em->flush(); // Errors here
但条令将该用户视为一个新实体,或抛出一个缺少某些参数的错误
我可以从数据库中再次获取用户,但这意味着每次我想使用当前用户对象做某事时都要这样做
$this->getDoctrine()->getRepository(User::class)->find($this->getUser()->getId())
这个问题似乎可能与user类中的serialize和unserialize方法有关,因为这些属性是user对象中唯一可用的属性
public function serialize()
{
return serialize(array(
$this->id,
$this->firstName,
$this->lastName,
$this->email,
$this->enabled,
$this->username,
));
}
public function unserialize($serialized)
{
list (
$this->id,
$this->firstName,
$this->lastName,
$this->email,
$this->enabled,
$this->username,
) = unserialize($serialized, ['allowed_classes' => false]
);
}
一旦用户通过身份验证,它们就会存储在会话中。$this->getUser()是从安全令牌返回的,所以我不明白为什么这与标准登录身份验证不同
我如何确保通过$this->getUser()可以使用完整的用户对象?即使您的未序列化用户具有标识符,但插入是未知的。要让Doctrine知道您可以使用的实体(请注意,它会返回实体的新实例)。请按如下方式尝试Doctrine$这个->getDoctrine()->getManager()我尝试了这种方法,没有遇到任何问题。您会遇到什么样的错误?我试图避免在每次请求时将用户从条令中拉出来,它应该已经存在于安全令牌中。我猜我需要在某个地方更改UserFactory或UserProvider中的某些内容。。。