src/EventSubscriber/InstallLogoutSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\RedirectResponse;
  5. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  6. use Symfony\Component\Security\Http\Event\LogoutEvent;
  7. /**
  8.  * Stellt sicher, dass nach dem QR-Logout der tgaHash erhalten bleibt,
  9.  * damit der Benutzer nach dem erneuten Login direkt zum richtigen
  10.  * Aufzug weitergeleitet wird.
  11.  *
  12.  * Ohne diesen Subscriber würde Symfony nach dem Logout auf /install/loginqr
  13.  * (ohne Hash) weiterleiten. Der tgaHash ist dann aus der Session weg
  14.  * (invalidate_session: true), sodass der erneute Login keinen Kontext hat.
  15.  */
  16. class InstallLogoutSubscriber implements EventSubscriberInterface
  17. {
  18.     private UrlGeneratorInterface $urlGenerator;
  19.     public function __construct(UrlGeneratorInterface $urlGenerator)
  20.     {
  21.         $this->urlGenerator $urlGenerator;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             LogoutEvent::class => 'onLogout',
  27.         ];
  28.     }
  29.     public function onLogout(LogoutEvent $event): void
  30.     {
  31.         $request $event->getRequest();
  32.         // tgaHash aus der Logout-Route holen (/install/logoutqr/{tgaHash})
  33.         $tgaHash = (string) $request->attributes->get('tgaHash''');
  34.         // Fallback: aus der Session holen (bevor sie invalidiert wird)
  35.         if ('' === $tgaHash && $request->hasSession()) {
  36.             $tgaHash = (string) $request->getSession()->get('tgaHash''');
  37.         }
  38.         if ('' === $tgaHash) {
  39.             // Kein Hash → Standard-Logout-Redirect gilt
  40.             return;
  41.         }
  42.         // Weiterleitung zur Login-Seite MIT dem tgaHash
  43.         $url $this->urlGenerator->generate('installloginqr', ['tgaHash' => $tgaHash]);
  44.         $event->setResponse(new RedirectResponse($url));
  45.     }
  46. }