src/EventListener/JWTCreatedListener.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManager;
  5. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. class JWTCreatedListener
  9. {
  10.     const REMEMBER_ME_EXPIRATION_DAYS 30;
  11.     /**
  12.      * @var RequestStack
  13.      */
  14.     private $requestStack;
  15.     /**
  16.      * @var EntityManager
  17.      */
  18.     private $entityManager;
  19.     /**
  20.      * @param RequestStack $requestStack
  21.      * @param EntityManager $entityManager
  22.      */
  23.     public function __construct(RequestStack $requestStackEntityManager $entityManager)
  24.     {
  25.         $this->requestStack $requestStack;
  26.         $this->entityManager $entityManager;
  27.     }
  28.     /**
  29.      * @param JWTCreatedEvent $event
  30.      *
  31.      * @return void
  32.      */
  33.     public function onJWTCreated(JWTCreatedEvent $event)
  34.     {
  35.         $payload       $event->getData();
  36.         // get user by it's username/email
  37.         /** @var User $user */
  38.         $user $this->entityManager->getRepository(User::class)->findOneBy(['email' => $payload['username']]);
  39.         $payload['caps'] = $user->getPermissions();
  40.         $payload['id'] = $user->getId();
  41.         $payload['firstname'] = $user->getFirstname();
  42.         $payload['lastname'] = $user->getLastname();
  43.         $payload['email'] = $user->getEmail();
  44.         $payload['isCompleted'] = $user->getIsRegistrationCompleted();
  45.         /** @var Request|null $request */
  46.         $request $this->requestStack->getCurrentRequest();
  47.         if (isset($request) && $request->getContentType() === 'json') {
  48.             $data json_decode($request->getContent(), true);
  49.             if ( !empty($data['_remember_me']) && $data['_remember_me'] === true ) {
  50.                 $expiration = new \DateTime('+' self::REMEMBER_ME_EXPIRATION_DAYS ' days');
  51.                 $payload['exp'] = $expiration->getTimestamp();
  52.             }
  53.         }
  54.         $event->setData($payload);
  55.     }
  56. }