diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 471f820c2199b..58cb40b39e432 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -681,7 +681,7 @@ private function createExceptionListener(ContainerBuilder $container, array $con return $exceptionListenerId; } - private function createSwitchUserListener(ContainerBuilder $container, string $id, array $config, string $defaultProvider, bool $stateless): string + private function createSwitchUserListener(ContainerBuilder $container, string $id, array $config, ?string $defaultProvider, bool $stateless): string { $userProvider = isset($config['provider']) ? $this->getUserProviderId($config['provider']) : $defaultProvider; diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php index 7c84f953a55d8..35a1930158235 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php @@ -390,6 +390,30 @@ public function sessionConfigurationProvider() ]; } + public function testSwitchUserWithSeveralDefinedProvidersButNoFirewallRootProviderConfigured() + { + $container = $this->getRawContainer(); + $container->loadFromExtension('security', [ + 'providers' => [ + 'first' => ['id' => 'foo'], + 'second' => ['id' => 'bar'], + ], + + 'firewalls' => [ + 'foobar' => [ + 'switch_user' => [ + 'provider' => 'second', + ], + 'anonymous' => true, + ], + ], + ]); + + $container->compile(); + + $this->assertEquals(new Reference('security.user.provider.concrete.second'), $container->getDefinition('security.authentication.switchuser_listener.foobar')->getArgument(1)); + } + protected function getRawContainer() { $container = new ContainerBuilder();