Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7ef6a7a

Browse files
committed
Use the firewall event dispatcher
1 parent 95edc80 commit 7ef6a7a

File tree

6 files changed

+26
-38
lines changed

6 files changed

+26
-38
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,8 @@ private function createRememberMeListener(ContainerBuilder $container, string $i
218218
{
219219
$container
220220
->setDefinition('security.listener.remember_me.'.$id, new ChildDefinition('security.listener.remember_me'))
221-
->addTag('kernel.event_subscriber')
221+
->addTag('kernel.event_subscriber', ['dispatcher' => 'security.event_dispatcher.'.$id])
222222
->replaceArgument(0, new Reference($rememberMeServicesId))
223-
->replaceArgument(1, $id)
224223
;
225224

226225
$container

src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,11 @@ public function load(array $configs, ContainerBuilder $container)
156156
->replaceArgument(2, $this->statelessFirewallKeys);
157157

158158
if ($this->authenticatorManagerEnabled) {
159-
$container->getDefinition(SessionListener::class)
160-
->replaceArgument(1, $this->statelessFirewallKeys);
159+
foreach ($this->statelessFirewallKeys as $statelessFirewallId) {
160+
$container
161+
->setDefinition('security.listener.session.'.$statelessFirewallId, new ChildDefinition('security.listener.session'))
162+
->addTag('kernel.event_subscriber', ['dispatcher' => 'security.event_dispatcher.'.$statelessFirewallId]);
163+
}
161164
}
162165

163166
if ($config['encoders']) {
@@ -446,6 +449,7 @@ private function createFirewall(ContainerBuilder $container, string $id, array $
446449
$container
447450
->setDefinition($managerId = 'security.authenticator.manager.'.$id, new ChildDefinition('security.authenticator.manager'))
448451
->replaceArgument(0, $authenticators)
452+
->replaceArgument(2, new Reference($firewallEventDispatcherId))
449453
->replaceArgument(3, $id)
450454
->addTag('monolog.logger', ['channel' => 'security'])
451455
;

src/Symfony/Bundle/SecurityBundle/EventListener/FirewallEventBubblingListener.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
namespace Symfony\Bundle\SecurityBundle\EventListener;
1313

1414
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15+
use Symfony\Component\Security\Http\Event\LoginFailureEvent;
16+
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
1517
use Symfony\Component\Security\Http\Event\LogoutEvent;
18+
use Symfony\Component\Security\Http\Event\VerifyAuthenticatorCredentialsEvent;
1619
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
1720

1821
/**
@@ -34,6 +37,9 @@ public static function getSubscribedEvents(): array
3437
{
3538
return [
3639
LogoutEvent::class => 'bubbleEvent',
40+
LoginFailureEvent::class => 'bubbleEvent',
41+
LoginSuccessEvent::class => 'bubbleEvent',
42+
VerifyAuthenticatorCredentialsEvent::class => 'bubbleEvent',
3743
];
3844
}
3945

src/Symfony/Bundle/SecurityBundle/Resources/config/security_authenticator.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@
5959
<argument type="service" id="Symfony\Component\Security\Core\User\UserCheckerInterface" />
6060
</service>
6161

62-
<service id="security.listener.session" class="Symfony\Component\Security\Http\EventListener\SessionStrategyListener">
63-
<tag name="kernel.event_subscriber" />
62+
<service id="security.listener.session"
63+
class="Symfony\Component\Security\Http\EventListener\SessionStrategyListener"
64+
abstract="true">
6465
<argument type="service" id="security.authentication.session_strategy" />
6566
<argument type="abstract">stateless firewall keys</argument>
6667
</service>

src/Symfony/Component/Security/Http/EventListener/RememberMeListener.php

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,29 @@
2626
class RememberMeListener implements EventSubscriberInterface
2727
{
2828
private $rememberMeServices;
29-
private $providerKey;
3029
private $logger;
3130

32-
public function __construct(RememberMeServicesInterface $rememberMeServices, string $providerKey, ?LoggerInterface $logger = null)
31+
public function __construct(RememberMeServicesInterface $rememberMeServices, ?LoggerInterface $logger = null)
3332
{
3433
$this->rememberMeServices = $rememberMeServices;
35-
$this->providerKey = $providerKey;
3634
$this->logger = $logger;
3735
}
3836

3937

4038
public function onSuccessfulLogin(LoginSuccessEvent $event): void
4139
{
42-
if (!$this->isRememberMeEnabled($event->getProviderKey(), $event->getAuthenticator())) {
40+
$authenticator = $event->getAuthenticator();
41+
if (!$authenticator instanceof RememberMeAuthenticatorInterface || !$authenticator->supportsRememberMe()) {
42+
if (null !== $this->logger) {
43+
$this->logger->debug('Remember me skipped: your authenticator does not support it.', ['authenticator' => \get_class($authenticator)]);
44+
}
45+
4346
return;
4447
}
4548

4649
if (null === $event->getResponse()) {
4750
if (null !== $this->logger) {
48-
$this->logger->debug('Remember me skipped: the authenticator did not set a success response.', ['authenticator' => \get_class($event->getAuthenticator())]);
51+
$this->logger->debug('Remember me skipped: the authenticator did not set a success response.', ['authenticator' => \get_class($authenticator)]);
4952
}
5053

5154
return;
@@ -56,31 +59,9 @@ public function onSuccessfulLogin(LoginSuccessEvent $event): void
5659

5760
public function onFailedLogin(LoginFailureEvent $event): void
5861
{
59-
if (!$this->isRememberMeEnabled($event->getProviderKey())) {
60-
return;
61-
}
62-
6362
$this->rememberMeServices->loginFail($event->getRequest(), $event->getException());
6463
}
6564

66-
private function isRememberMeEnabled(string $providerKey, ?AuthenticatorInterface $authenticator = null): bool
67-
{
68-
if ($providerKey !== $this->providerKey) {
69-
// This listener is created for a different firewall.
70-
return false;
71-
}
72-
73-
if (null !== $authenticator && (!$authenticator instanceof RememberMeAuthenticatorInterface || !$authenticator->supportsRememberMe())) {
74-
if (null !== $this->logger) {
75-
$this->logger->debug('Remember me skipped: your authenticator does not support it.', ['authenticator' => \get_class($authenticator)]);
76-
}
77-
78-
return false;
79-
}
80-
81-
return true;
82-
}
83-
8465
public static function getSubscribedEvents(): array
8566
{
8667
return [

src/Symfony/Component/Security/Http/EventListener/SessionStrategyListener.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,18 @@
2828
class SessionStrategyListener implements EventSubscriberInterface
2929
{
3030
private $sessionAuthenticationStrategy;
31-
private $statelessProviderKeys;
3231

33-
public function __construct(SessionAuthenticationStrategyInterface $sessionAuthenticationStrategy, array $statelessProviderKeys = [])
32+
public function __construct(SessionAuthenticationStrategyInterface $sessionAuthenticationStrategy)
3433
{
3534
$this->sessionAuthenticationStrategy = $sessionAuthenticationStrategy;
36-
$this->statelessProviderKeys = $statelessProviderKeys;
3735
}
3836

3937
public function onSuccessfulLogin(LoginSuccessEvent $event): void
4038
{
4139
$request = $event->getRequest();
4240
$token = $event->getAuthenticatedToken();
43-
$providerKey = $event->getProviderKey();
4441

45-
if (!$request->hasSession() || !$request->hasPreviousSession() || \in_array($providerKey, $this->statelessProviderKeys, true)) {
42+
if (!$request->hasSession() || !$request->hasPreviousSession()) {
4643
return;
4744
}
4845

0 commit comments

Comments
 (0)