diff options
author | Christian Flothmann <christian.flothmann@xabbuh.de> | 2015-11-05 23:29:27 +0100 |
---|---|---|
committer | Fabien Potencier <fabien.potencier@gmail.com> | 2015-11-23 11:29:01 +0100 |
commit | 6993b7e82c836228e078a80c37c79ef247ee9ff8 (patch) | |
tree | 918461fb2fa94c4562f3541b98468f82b26d8883 | |
parent | 8dc26161ffb6ba4c04d3eb1f72eb819ec240c00e (diff) | |
download | symfony-security-6993b7e82c836228e078a80c37c79ef247ee9ff8.zip symfony-security-6993b7e82c836228e078a80c37c79ef247ee9ff8.tar.gz symfony-security-6993b7e82c836228e078a80c37c79ef247ee9ff8.tar.bz2 |
migrate session after remember me authenticationv2.6.12
-rw-r--r-- | Http/Firewall/RememberMeListener.php | 8 | ||||
-rw-r--r-- | Http/Tests/Firewall/RememberMeListenerTest.php | 54 |
2 files changed, 62 insertions, 0 deletions
diff --git a/Http/Firewall/RememberMeListener.php b/Http/Firewall/RememberMeListener.php index 12999a4..3bb3a2e 100644 --- a/Http/Firewall/RememberMeListener.php +++ b/Http/Firewall/RememberMeListener.php @@ -20,6 +20,7 @@ use Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategy; /** * RememberMeListener implements authentication capabilities via a cookie. @@ -34,6 +35,7 @@ class RememberMeListener implements ListenerInterface private $logger; private $dispatcher; private $catchExceptions = true; + private $sessionStrategy; /** * Constructor. @@ -53,6 +55,7 @@ class RememberMeListener implements ListenerInterface $this->logger = $logger; $this->dispatcher = $dispatcher; $this->catchExceptions = $catchExceptions; + $this->sessionStrategy = new SessionAuthenticationStrategy(SessionAuthenticationStrategy::MIGRATE); } /** @@ -73,6 +76,11 @@ class RememberMeListener implements ListenerInterface try { $token = $this->authenticationManager->authenticate($token); + + if ($request->hasSession() && $request->getSession()->isStarted()) { + $this->sessionStrategy->onAuthentication($request, $token); + } + $this->securityContext->setToken($token); if (null !== $this->dispatcher) { diff --git a/Http/Tests/Firewall/RememberMeListenerTest.php b/Http/Tests/Firewall/RememberMeListenerTest.php index 3f43fb2..8a666bb 100644 --- a/Http/Tests/Firewall/RememberMeListenerTest.php +++ b/Http/Tests/Firewall/RememberMeListenerTest.php @@ -181,6 +181,60 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase $listener->handle($event); } + public function testSessionStrategy() + { + list($listener, $tokenStorage, $service, $manager) = $this->getListener(false, true, true); + $tokenStorage + ->expects($this->once()) + ->method('getToken') + ->will($this->returnValue(null)) + ; + $token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'); + $service + ->expects($this->once()) + ->method('autoLogin') + ->will($this->returnValue($token)) + ; + $tokenStorage + ->expects($this->once()) + ->method('setToken') + ->with($this->equalTo($token)) + ; + $manager + ->expects($this->once()) + ->method('authenticate') + ->will($this->returnValue($token)) + ; + $session = $this->getMock('\Symfony\Component\HttpFoundation\Session\SessionInterface'); + $session + ->expects($this->once()) + ->method('isStarted') + ->will($this->returnValue(true)) + ; + $session + ->expects($this->once()) + ->method('migrate') + ; + $request = $this->getMock('\Symfony\Component\HttpFoundation\Request'); + $request + ->expects($this->any()) + ->method('hasSession') + ->will($this->returnValue(true)) + ; + $request + ->expects($this->any()) + ->method('getSession') + ->will($this->returnValue($session)) + ; + $event = $this->getGetResponseEvent(); + $event + ->expects($this->once()) + ->method('getRequest') + ->will($this->returnValue($request)) + ; + $listener->handle($event); + } + public function testOnCoreSecurityInteractiveLoginEventIsDispatchedIfDispatcherIsPresent() { list($listener, $context, $service, $manager, , $dispatcher) = $this->getListener(true); |