source/Security/Authentication/OauthLogoutSubscriber.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Security\Authentication;
  3. use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  7. use Symfony\Component\Security\Http\Event\LogoutEvent;
  8. class OauthLogoutSubscriber implements EventSubscriberInterface
  9. {
  10.     private ClientRegistry $clientRegistry;
  11.     private UrlGeneratorInterface $urlGenerator;
  12.     public function __construct(ClientRegistry $clientRegistryUrlGeneratorInterface $urlGenerator)
  13.     {
  14.         $this->clientRegistry $clientRegistry;
  15.         $this->urlGenerator $urlGenerator;
  16.     }
  17.     /**
  18.      * This function returns an array containing the subscribed events and the function that is called when the subscribed event is called.
  19.      * Multiple Event => functions are possible.
  20.      *
  21.      * @return array|string[]
  22.      */
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             LogoutEvent::class => 'onLogoutEvent',
  27.         ];
  28.     }
  29.     /**
  30.      * This function handles the Keycloak logout event!
  31.      *
  32.      * @param LogoutEvent $event
  33.      */
  34.     public function onLogoutEvent(LogoutEvent $event)
  35.     {
  36.         $provider $this->clientRegistry->getClient('keycloak');
  37.         $targetUrl $this->urlGenerator->generate('dashboard', [], UrlGeneratorInterface::ABSOLUTE_URL);
  38.         $logout $provider->getOAuth2Provider()->getLogoutUrl(["redirect_uri" => $targetUrl]);
  39.         $event->setResponse(new RedirectResponse($logout));
  40.     }
  41. }