Skip to content

Commit 4c035aa

Browse files
johnvandeweghefabpot
authored andcommitted
[SecurityBundle] Fix the session listener registration under the new authentication manager
1 parent 481a00d commit 4c035aa

File tree

3 files changed

+48
-9
lines changed

3 files changed

+48
-9
lines changed

DependencyInjection/SecurityExtension.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,6 @@ public function load(array $configs, ContainerBuilder $container)
168168
$container->getDefinition('security.authentication.guard_handler')
169169
->replaceArgument(2, $this->statelessFirewallKeys);
170170

171-
if ($this->authenticatorManagerEnabled) {
172-
foreach ($this->statelessFirewallKeys as $statelessFirewallId) {
173-
$container
174-
->setDefinition('security.listener.session.'.$statelessFirewallId, new ChildDefinition('security.listener.session'))
175-
->addTag('kernel.event_subscriber', ['dispatcher' => 'security.event_dispatcher.'.$statelessFirewallId]);
176-
}
177-
}
178-
179171
if ($config['encoders']) {
180172
$this->createEncoders($config['encoders'], $container);
181173
}
@@ -373,6 +365,12 @@ private function createFirewall(ContainerBuilder $container, string $id, array $
373365
$contextKey = $firewall['context'] ?? $id;
374366
$listeners[] = new Reference($contextListenerId = $this->createContextListener($container, $contextKey));
375367
$sessionStrategyId = 'security.authentication.session_strategy';
368+
369+
if ($this->authenticatorManagerEnabled) {
370+
$container
371+
->setDefinition('security.listener.session.'.$id, new ChildDefinition('security.listener.session'))
372+
->addTag('kernel.event_subscriber', ['dispatcher' => $firewallEventDispatcherId]);
373+
}
376374
} else {
377375
$this->statelessFirewallKeys[] = $id;
378376
$sessionStrategyId = 'security.authentication.session_strategy_noop';

Resources/config/security_authenticator.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
class="Symfony\Component\Security\Http\EventListener\SessionStrategyListener"
6464
abstract="true">
6565
<argument type="service" id="security.authentication.session_strategy" />
66-
<argument type="abstract">stateless firewall keys</argument>
6766
</service>
6867

6968
<service id="security.listener.remember_me"

Tests/DependencyInjection/SecurityExtensionTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,48 @@ public function provideConfigureCustomAuthenticatorData()
559559
];
560560
}
561561

562+
public function testCompilesWithoutSessionListenerWithStatelessFirewallWithAuthenticationManager()
563+
{
564+
$container = $this->getRawContainer();
565+
566+
$firewallId = 'stateless_firewall';
567+
$container->loadFromExtension('security', [
568+
'enable_authenticator_manager' => true,
569+
'firewalls' => [
570+
$firewallId => [
571+
'pattern' => '/.*',
572+
'stateless' => true,
573+
'http_basic' => null,
574+
],
575+
],
576+
]);
577+
578+
$container->compile();
579+
580+
$this->assertFalse($container->has('security.listener.session.'.$firewallId));
581+
}
582+
583+
public function testCompilesWithSessionListenerWithStatefulllFirewallWithAuthenticationManager()
584+
{
585+
$container = $this->getRawContainer();
586+
587+
$firewallId = 'statefull_firewall';
588+
$container->loadFromExtension('security', [
589+
'enable_authenticator_manager' => true,
590+
'firewalls' => [
591+
$firewallId => [
592+
'pattern' => '/.*',
593+
'stateless' => false,
594+
'http_basic' => null,
595+
],
596+
],
597+
]);
598+
599+
$container->compile();
600+
601+
$this->assertTrue($container->has('security.listener.session.'.$firewallId));
602+
}
603+
562604
protected function getRawContainer()
563605
{
564606
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)