Enabled remember me for the GuardManagerListener
This commit is contained in:
parent
873b949cf9
commit
b923e4c4f6
@ -418,6 +418,19 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
|
|||||||
// Determine default entry point
|
// Determine default entry point
|
||||||
$configuredEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null;
|
$configuredEntryPoint = isset($firewall['entry_point']) ? $firewall['entry_point'] : null;
|
||||||
|
|
||||||
|
if ($this->guardAuthenticationManagerEnabled) {
|
||||||
|
// guard authentication manager listener (must be before calling createAuthenticationListeners() to inject remember me services)
|
||||||
|
$container
|
||||||
|
->setDefinition('security.firewall.guard.'.$id, new ChildDefinition('security.firewall.guard'))
|
||||||
|
->replaceArgument(2, new Reference('security.firewall.guard.'.$id.'.locator'))
|
||||||
|
->replaceArgument(3, $id)
|
||||||
|
->addTag('kernel.event_listener', ['event' => KernelEvents::REQUEST])
|
||||||
|
->addTag('security.remember_me_aware', ['id' => $id, 'provider' => 'none'])
|
||||||
|
;
|
||||||
|
|
||||||
|
$listeners[] = new Reference('security.firewall.guard.'.$id);
|
||||||
|
}
|
||||||
|
|
||||||
// Authentication listeners
|
// Authentication listeners
|
||||||
$firewallAuthenticationProviders = [];
|
$firewallAuthenticationProviders = [];
|
||||||
list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $firewallAuthenticationProviders, $defaultProvider, $providerIds, $configuredEntryPoint, $contextListenerId);
|
list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $firewallAuthenticationProviders, $defaultProvider, $providerIds, $configuredEntryPoint, $contextListenerId);
|
||||||
@ -425,7 +438,7 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
|
|||||||
$authenticationProviders = array_merge($authenticationProviders, $firewallAuthenticationProviders);
|
$authenticationProviders = array_merge($authenticationProviders, $firewallAuthenticationProviders);
|
||||||
|
|
||||||
if ($this->guardAuthenticationManagerEnabled) {
|
if ($this->guardAuthenticationManagerEnabled) {
|
||||||
// guard authentication manager listener
|
// add authentication providers for this firewall to the GuardManagerListener (if guard is enabled)
|
||||||
$container
|
$container
|
||||||
->setDefinition('security.firewall.guard.'.$id.'.locator', new ChildDefinition('security.firewall.guard.locator'))
|
->setDefinition('security.firewall.guard.'.$id.'.locator', new ChildDefinition('security.firewall.guard.locator'))
|
||||||
->setArguments([array_map(function ($id) {
|
->setArguments([array_map(function ($id) {
|
||||||
@ -434,13 +447,9 @@ class SecurityExtension extends Extension implements PrependExtensionInterface
|
|||||||
->addTag('container.service_locator')
|
->addTag('container.service_locator')
|
||||||
;
|
;
|
||||||
$container
|
$container
|
||||||
->setDefinition('security.firewall.guard.'.$id, new ChildDefinition('security.firewall.guard'))
|
->getDefinition('security.firewall.guard.'.$id)
|
||||||
->replaceArgument(2, new Reference('security.firewall.guard.'.$id.'.locator'))
|
->replaceArgument(2, new Reference('security.firewall.guard.'.$id.'.locator'))
|
||||||
->replaceArgument(3, $id)
|
|
||||||
->addTag('kernel.event_listener', ['event' => KernelEvents::REQUEST])
|
|
||||||
;
|
;
|
||||||
|
|
||||||
$listeners[] = new Reference('security.firewall.guard.'.$id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$config->replaceArgument(7, $configuredEntryPoint ?: $defaultEntryPoint);
|
$config->replaceArgument(7, $configuredEntryPoint ?: $defaultEntryPoint);
|
||||||
|
@ -150,11 +150,6 @@ trait GuardAuthenticatorListenerTrait
|
|||||||
throw new \UnexpectedValueException('Invalid guard authenticator passed to '.__METHOD__.'. Expected AuthenticatorInterface of either Security Core or Security Guard.');
|
throw new \UnexpectedValueException('Invalid guard authenticator passed to '.__METHOD__.'. Expected AuthenticatorInterface of either Security Core or Security Guard.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo implement remember me functionality
|
|
||||||
if (!isset($this->rememberMeServices)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $this->rememberMeServices) {
|
if (null === $this->rememberMeServices) {
|
||||||
if (null !== $this->logger) {
|
if (null !== $this->logger) {
|
||||||
$this->logger->debug('Remember me skipped: it is not configured for the firewall.', ['authenticator' => \get_class($guardAuthenticator)]);
|
$this->logger->debug('Remember me skipped: it is not configured for the firewall.', ['authenticator' => \get_class($guardAuthenticator)]);
|
||||||
|
@ -17,6 +17,7 @@ use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterfac
|
|||||||
use Symfony\Component\Security\Core\Authentication\Authenticator\AuthenticatorInterface;
|
use Symfony\Component\Security\Core\Authentication\Authenticator\AuthenticatorInterface;
|
||||||
use Symfony\Component\Security\Guard\Firewall\GuardAuthenticatorListenerTrait;
|
use Symfony\Component\Security\Guard\Firewall\GuardAuthenticatorListenerTrait;
|
||||||
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
|
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
|
||||||
|
use Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Wouter de Jong <wouter@wouterj.nl>
|
* @author Wouter de Jong <wouter@wouterj.nl>
|
||||||
@ -34,6 +35,7 @@ class GuardManagerListener
|
|||||||
private $guardAuthenticators;
|
private $guardAuthenticators;
|
||||||
protected $providerKey;
|
protected $providerKey;
|
||||||
protected $logger;
|
protected $logger;
|
||||||
|
private $rememberMeServices;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param AuthenticatorInterface[] $guardAuthenticators
|
* @param AuthenticatorInterface[] $guardAuthenticators
|
||||||
@ -58,6 +60,11 @@ class GuardManagerListener
|
|||||||
$this->executeGuardAuthenticators($guardAuthenticators, $requestEvent);
|
$this->executeGuardAuthenticators($guardAuthenticators, $requestEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setRememberMeServices(RememberMeServicesInterface $rememberMeServices)
|
||||||
|
{
|
||||||
|
$this->rememberMeServices = $rememberMeServices;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getGuardKey(string $key): string
|
protected function getGuardKey(string $key): string
|
||||||
{
|
{
|
||||||
// Guard authenticators in the GuardManagerListener are already indexed
|
// Guard authenticators in the GuardManagerListener are already indexed
|
||||||
|
Reference in New Issue
Block a user