src/EventListener/AuthenticationSuccessListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\DTOs\UserMe;
  4. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  5. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  6. use Namshi\JOSE\JWS;
  7. class AuthenticationSuccessListener
  8. {
  9.     private JWTTokenManagerInterface $JWTManager;
  10.     public function __construct(JWTTokenManagerInterface $JWTManager)
  11.     {
  12.         $this->JWTManager $JWTManager;
  13.     }
  14.     public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
  15.     {
  16.         $data $event->getData();
  17.         $user $event->getUser();
  18.         if (!$user instanceof UserMe) {
  19.             return;
  20.         }
  21.         $jws JWS::load($data['token']);
  22.         // TODO: tmp only for development
  23.         if (in_array($user->getUser()->getEmail(), explode(','$_ENV['TEST_TOKEN_USERS']))) {
  24.             $payload $jws->getPayload();
  25.             $payload['iat'] = time();
  26.             $payload['exp'] = $payload['iat'] + $_ENV['TEST_TOKEN_TTL'];
  27.             $data['token'] = $this->JWTManager->createFromPayload($user$payload);
  28.             $jws JWS::load($data['token']);
  29.         }
  30.         $data['ttl'] = $jws->getPayload()['exp'] - $jws->getPayload()['iat'];
  31.         $data['expire_at'] = $jws->getPayload()['exp'];
  32.         $data['state'] = $user->getUser()->getState();
  33.         $event->setData($data);
  34.     }
  35. }