diff --git a/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php b/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php index b9bdf26e0d1ca..a1043d8213f33 100644 --- a/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php +++ b/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php @@ -15,6 +15,7 @@ use Doctrine\Persistence\Mapping\ClassMetadata; use Doctrine\Persistence\ObjectManager; use Doctrine\Persistence\ObjectRepository; +use Doctrine\Persistence\Proxy; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; @@ -117,6 +118,10 @@ public function refreshUser(UserInterface $user) } } + if ($refreshedUser instanceof Proxy && !$refreshedUser->__isInitialized()) { + $refreshedUser->__load(); + } + return $refreshedUser; } diff --git a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php index 7a09cb8802f72..eb7b00d561173 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php @@ -16,6 +16,7 @@ use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ObjectManager; use Doctrine\Persistence\ObjectRepository; +use Doctrine\Persistence\Proxy; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider; use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface; @@ -197,6 +198,27 @@ public function testPasswordUpgrades() $provider->upgradePassword($user, 'foobar'); } + public function testRefreshedUserProxyIsLoaded() + { + $em = DoctrineTestHelper::createTestEntityManager(); + $this->createSchema($em); + + $user = new User(1, 1, 'user1'); + + $em->persist($user); + $em->flush(); + $em->clear(); + + // store a proxy in the identity map + $em->getReference(User::class, ['id1' => 1, 'id2' => 1]); + + $provider = new EntityUserProvider($this->getManager($em), User::class); + $refreshedUser = $provider->refreshUser($user); + + $this->assertInstanceOf(Proxy::class, $refreshedUser); + $this->assertTrue($refreshedUser->__isInitialized()); + } + private function getManager($em, $name = null) { $manager = $this->createMock(ManagerRegistry::class); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy