Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在更新当前Symfony用户,正在尝试创建_Symfony_Security_Doctrine_Token_Saml - Fatal编程技术网

正在更新当前Symfony用户,正在尝试创建

正在更新当前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->

我将Symfony 4设置为使用SAML登录系统。当使用SAML对用户进行身份验证时,如果用户已经存在或持续存在,UserFactory将从数据库中获取该用户,并刷新新的用户实体

在控制器中,我尝试使用一些简单的代码:

$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中的某些内容。。。