src/Listener/JWTCreatedListener.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Repository\UserRepository;
  4. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use DateInterval;
  8. use App\Services\SqlService\SqlService;
  9. class JWTCreatedListener extends AbstractController
  10. {
  11.     private $requestStack;
  12.     private $userRepository;
  13.     private $sqlService;
  14.     
  15.     /**
  16.      * @param RequestStack $requestStack
  17.      * @param UserRepository $userRepository
  18.      */
  19.     public function __construct(RequestStack $requestStackUserRepository $userRepositorySqlService $sqlService)
  20.     {
  21.         $this->requestStack $requestStack;
  22.         $this->userRepository $userRepository;
  23.         $this->sqlService $sqlService;
  24.     }
  25.     /**
  26.      * @param JWTCreatedEvent $event
  27.      * @param UserRepository $userRepository
  28.      * @return void
  29.      *  este se inicia el primero
  30.      */
  31.     public function onJWTCreated(JWTCreatedEvent $event)
  32.     {
  33.         $payload $event->getData();
  34.         $data $this->userRepository->findOneByEmail($payload['username']);
  35.         // Fecha de expiracion del token 3 horas a partir de la ultima visita
  36.         $expiration = new \DateTime();
  37.         $expiration->add(new DateInterval('PT2H'));
  38.         $sql "SELECT valor FROM custom_values 
  39.         WHERE entidad = 'USER' AND entidad_id = ? AND clave = 'foto'";
  40.         
  41.         
  42.         // Solo se activa cuando se hace login //
  43.         $payload $event->getData();
  44.         $payload['exp'] = $expiration->getTimestamp();
  45.         $payload['uuid'] = $data->getId();
  46.         $payload['username'] = $data->getEmail();
  47.         $payload['roles'] = $data->getRoles();
  48.         $payload['dni'] = $data->getDni();
  49.         $payload['nombre'] = $data->getNombre();
  50.         $payload['estado'] = $data->getEstado();
  51.         $foto $this->sqlService->generateSql($sql, [$data->getId()]);
  52.         if ($foto) {
  53.             $payload['foto'] = $foto['valor'];
  54.         }
  55.         $event->setData($payload);
  56.         $header $event->getHeader();
  57.         $header['cty'] = 'JWT';
  58.         $event->setHeader($header);
  59.     }
  60. }