diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index f59ad4e5b3..a04e29973a 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -234,6 +234,16 @@ class SecurityExtension extends Extension $firewalls = $config['firewalls']; $providerIds = $this->createUserProviders($config, $container); + // make the ContextListener aware of the configured user providers + $definition = $container->getDefinition('security.context_listener'); + $arguments = $definition->getArguments(); + $userProviders = array(); + foreach ($providerIds as $userProviderId) { + $userProviders[] = new Reference($userProviderId); + } + $arguments[1] = $userProviders; + $definition->setArguments($arguments); + // load firewall map $mapDef = $container->getDefinition('security.firewall.map'); $map = $authenticationProviders = $contextRefs = array(); @@ -317,7 +327,7 @@ class SecurityExtension extends Extension $contextKey = $firewall['context']; } - $listeners[] = new Reference($this->createContextListener($container, $contextKey, $defaultProvider)); + $listeners[] = new Reference($this->createContextListener($container, $contextKey)); } $config->replaceArgument(6, $contextKey); @@ -426,7 +436,7 @@ class SecurityExtension extends Extension return array($matcher, $listeners, $exceptionListener); } - private function createContextListener($container, $contextKey, $providerId) + private function createContextListener($container, $contextKey) { if (isset($this->contextListeners[$contextKey])) { return $this->contextListeners[$contextKey]; @@ -434,7 +444,6 @@ class SecurityExtension extends Extension $listenerId = 'security.context_listener.'.count($this->contextListeners); $listener = $container->setDefinition($listenerId, new ChildDefinition('security.context_listener')); - $listener->replaceArgument(1, array(new Reference($providerId))); $listener->replaceArgument(2, $contextKey); return $this->contextListeners[$contextKey] = $listenerId;