15
15
use Symfony \Component \HttpFoundation \RedirectResponse ;
16
16
use Symfony \Component \HttpFoundation \Request ;
17
17
use Symfony \Component \HttpKernel \Event \RequestEvent ;
18
+ use Symfony \Component \Routing \Generator \UrlGeneratorInterface ;
18
19
use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorageInterface ;
19
20
use Symfony \Component \Security \Core \Authentication \Token \SwitchUserToken ;
20
21
use Symfony \Component \Security \Core \Authentication \Token \TokenInterface ;
@@ -51,9 +52,10 @@ class SwitchUserListener extends AbstractListener
51
52
private ?LoggerInterface $ logger ;
52
53
private ?EventDispatcherInterface $ dispatcher ;
53
54
private bool $ stateless ;
54
- private ?string $ targetUrl ;
55
+ private ?UrlGeneratorInterface $ urlGenerator ;
56
+ private ?string $ targetRoute ;
55
57
56
- public function __construct (TokenStorageInterface $ tokenStorage , UserProviderInterface $ provider , UserCheckerInterface $ userChecker , string $ firewallName , AccessDecisionManagerInterface $ accessDecisionManager , LoggerInterface $ logger = null , string $ usernameParameter = '_switch_user ' , string $ role = 'ROLE_ALLOWED_TO_SWITCH ' , EventDispatcherInterface $ dispatcher = null , bool $ stateless = false , string $ targetUrl = null )
58
+ public function __construct (TokenStorageInterface $ tokenStorage , UserProviderInterface $ provider , UserCheckerInterface $ userChecker , string $ firewallName , AccessDecisionManagerInterface $ accessDecisionManager , LoggerInterface $ logger = null , string $ usernameParameter = '_switch_user ' , string $ role = 'ROLE_ALLOWED_TO_SWITCH ' , EventDispatcherInterface $ dispatcher = null , bool $ stateless = false , UrlGeneratorInterface $ urlGenerator = null , string $ targetRoute = null )
57
59
{
58
60
if ('' === $ firewallName ) {
59
61
throw new \InvalidArgumentException ('$firewallName must not be empty. ' );
@@ -69,7 +71,8 @@ public function __construct(TokenStorageInterface $tokenStorage, UserProviderInt
69
71
$ this ->logger = $ logger ;
70
72
$ this ->dispatcher = $ dispatcher ;
71
73
$ this ->stateless = $ stateless ;
72
- $ this ->targetUrl = $ targetUrl ;
74
+ $ this ->urlGenerator = $ urlGenerator ;
75
+ $ this ->targetRoute = $ targetRoute ;
73
76
}
74
77
75
78
public function supports (Request $ request ): ?bool
@@ -121,7 +124,7 @@ public function authenticate(RequestEvent $event)
121
124
if (!$ this ->stateless ) {
122
125
$ request ->query ->remove ($ this ->usernameParameter );
123
126
$ request ->server ->set ('QUERY_STRING ' , http_build_query ($ request ->query ->all (), '' , '& ' ));
124
- $ response = new RedirectResponse ($ this ->targetUrl ?? $ request ->getUri (), 302 );
127
+ $ response = new RedirectResponse ($ this ->urlGenerator && $ this -> targetRoute ? $ this -> urlGenerator -> generate ( $ this -> targetRoute ) : $ request ->getUri (), 302 );
125
128
126
129
$ event ->setResponse ($ response );
127
130
}
0 commit comments