src/EventSubscriber/UserSessionSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\Routing\RouterInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. class UserSessionSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         private Security $security,
  14.         private RouterInterface $router,
  15.         private ManagerRegistry $managerRegistry
  16.     ) {}
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             RequestEvent::class => 'onKernelRequest'
  21.         ];
  22.     }
  23.     public function onKernelRequest(RequestEvent $event): void
  24.     {
  25.         if (!$event->isMainRequest()) return;
  26.         if ($this->security->getUser()) $this->logoutUser($event$this->security->getUser());
  27.     }
  28.     private function logoutUser(RequestEvent $eventUser $user): void
  29.     {
  30.         if ($user->isIsLocked()) {
  31.             $event->setResponse(new RedirectResponse($this->router->generate('app_logout')));
  32.             $user->setIsLocked(false);
  33.             $this->managerRegistry->getManager()->flush();
  34.         }
  35.     }
  36. }