31
31
use Symfony \Component \Security \Core \User \UserInterface ;
32
32
use Symfony \Component \Security \Core \User \UserProviderInterface ;
33
33
use Symfony \Component \Security \Http \Firewall \ContextListener ;
34
+ use Symfony \Component \Security \Http \RememberMe \RememberMeServicesInterface ;
34
35
35
36
class ContextListenerTest extends TestCase
36
37
{
@@ -278,6 +279,19 @@ public function testIfTokenIsNotDeauthenticated()
278
279
$ this ->assertSame ($ goodRefreshedUser , $ tokenStorage ->getToken ()->getUser ());
279
280
}
280
281
282
+ public function testRememberMeGetsCanceledIfTokenIsDeauthenticated ()
283
+ {
284
+ $ tokenStorage = new TokenStorage ();
285
+ $ refreshedUser = new User ('foobar ' , 'baz ' );
286
+
287
+ $ rememberMeServices = $ this ->createMock (RememberMeServicesInterface::class);
288
+ $ rememberMeServices ->expects ($ this ->once ())->method ('loginFail ' );
289
+
290
+ $ this ->handleEventWithPreviousSession ($ tokenStorage , [new NotSupportingUserProvider (), new SupportingUserProvider ($ refreshedUser )], null , true , $ rememberMeServices );
291
+
292
+ $ this ->assertNull ($ tokenStorage ->getToken ());
293
+ }
294
+
281
295
public function testTryAllUserProvidersUntilASupportingUserProviderIsFound ()
282
296
{
283
297
$ tokenStorage = new TokenStorage ();
@@ -347,7 +361,7 @@ protected function runSessionOnKernelResponse($newToken, $original = null)
347
361
return $ session ;
348
362
}
349
363
350
- private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , $ logoutOnUserChange = false )
364
+ private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , $ logoutOnUserChange = false , RememberMeServicesInterface $ rememberMeServices = null )
351
365
{
352
366
$ user = $ user ?: new User ('foo ' , 'bar ' );
353
367
$ session = new Session (new MockArraySessionStorage ());
@@ -359,6 +373,10 @@ private function handleEventWithPreviousSession(TokenStorageInterface $tokenStor
359
373
360
374
$ listener = new ContextListener ($ tokenStorage , $ userProviders , 'context_key ' );
361
375
$ listener ->setLogoutOnUserChange ($ logoutOnUserChange );
376
+
377
+ if ($ rememberMeServices ) {
378
+ $ listener ->setRememberMeServices ($ rememberMeServices );
379
+ }
362
380
$ listener ->handle (new GetResponseEvent ($ this ->getMockBuilder ('Symfony\Component\HttpKernel\HttpKernelInterface ' )->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST ));
363
381
}
364
382
}
0 commit comments