Support for SwitchUserToken instances serialized with 4.4/5.1.

This commit is contained in:
Alexander M. Turek 2020-11-27 01:11:54 +01:00
parent 62184bd8f0
commit 01bea3c085
3 changed files with 20 additions and 1 deletions

View File

@ -59,7 +59,12 @@ class SwitchUserToken extends UsernamePasswordToken
*/
public function __unserialize(array $data): void
{
[$this->originalToken, $this->originatedFromUri, $parentData] = $data;
if (3 > \count($data)) {
// Support for tokens serialized with version 5.1 or lower of symfony/security-core.
[$this->originalToken, $parentData] = $data;
} else {
[$this->originalToken, $this->originatedFromUri, $parentData] = $data;
}
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}

View File

@ -84,4 +84,18 @@ class SwitchUserTokenTest extends TestCase
$this->assertNull($unserializedToken->getOriginatedFromUri());
}
public function testUnserializeOldToken()
{
/** @var SwitchUserToken $token */
$token = unserialize(file_get_contents(__DIR__.'/Fixtures/switch-user-token-4.4.txt'));
self::assertInstanceOf(SwitchUserToken::class, $token);
self::assertInstanceOf(UsernamePasswordToken::class, $token->getOriginalToken());
self::assertSame('john', $token->getUsername());
self::assertSame(['foo' => 'bar'], $token->getCredentials());
self::assertSame('main', $token->getFirewallName());
self::assertEquals(['ROLE_USER'], $token->getRoleNames());
self::assertNull($token->getOriginatedFromUri());
}
}