src/EventSubscriber/OneTimeConnexionSubscriber.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Session;
  4. use App\Repository\SessionRepository;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Doctrine\Persistence\ManagerRegistry;
  10. use Symfony\Component\Security\Core\Security;
  11. class OneTimeConnexionSubscriber implements EventSubscriberInterface
  12. {
  13.     private $entityManager;
  14.     private $sessionRepository;
  15.     private $security;
  16.     public function __construct(ManagerRegistry $doctrineSessionRepository $sessionRepositorySecurity $security)
  17.     {
  18.         $this->entityManager $doctrine->getManager();
  19.         $this->sessionRepository $sessionRepository;
  20.         $this->security $security;
  21.     }
  22.     public static function getSubscribedEvents()
  23.     {
  24.         // return the subscribed events, their methods and priorities
  25.         return [
  26.             KernelEvents::REQUEST => 'onKernelRequest',
  27.         ];
  28.     }
  29.     public function onKernelRequest(RequestEvent $event)
  30.     {
  31.         $token $event->getRequest()->headers->get('authorization');
  32.         if ($token) {
  33.             $tokenFinal explode('.'$token);
  34.             $session $this->sessionRepository->findOneBy(["token" => $tokenFinal[2]]);
  35.             if (!$session) {
  36.                 $response = new JsonResponse([
  37.                     'code'          => 401,
  38.                     'message'       => "Votre session est expiré"
  39.                 ], 401);
  40.                 $event->setResponse($response);
  41.             }
  42.         }
  43.     }
  44. }