src/EventListener/JWTAuthenticatedListener.php line 35

Open in your IDE?
  1. <?php
  2. /**
  3.  * Custom response success auth
  4.  *
  5.  * @package RMCS
  6.  * @author Vlad Shashkov  <vlad.s@zimalab.com>
  7.  * @copyright 2014 - 2019 The Zimalab
  8.  */
  9. declare(strict_types=1);
  10. namespace App\EventListener;
  11. use Doctrine\Persistence\{ManagerRegistryObjectManager};
  12. use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken;
  13. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  14. use Symfony\Component\Security\Core\User\UserInterface;
  15. class JWTAuthenticatedListener
  16. {
  17.     /**
  18.      * @var ObjectManager
  19.      */
  20.     private $em;
  21.     public function __construct(ManagerRegistry $registry)
  22.     {
  23.         $this->em $registry->getManager('default');
  24.     }
  25.     /**
  26.      * Event auth success
  27.      *
  28.      * @param AuthenticationSuccessEvent $event
  29.      */
  30.     public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event):void
  31.     {
  32.         $this->removeOldToken();
  33.         $this->setRolesResponse($event);
  34.     }
  35.     /**
  36.      * Remove old refresh token
  37.      */
  38.     private function removeOldToken():void
  39.     {
  40.         $refreshTokens $this->em
  41.             ->getRepository(RefreshToken::class)
  42.             ->findInvalid();
  43.         if (!empty($refreshTokens)) {
  44.             foreach ($refreshTokens as $refreshToken) {
  45.                 $this->em->remove($refreshToken);
  46.             }
  47.             $this->em->flush();
  48.         }
  49.     }
  50.     /**
  51.      * Set response role
  52.      *
  53.      * @param AuthenticationSuccessEvent $event
  54.      */
  55.     private function setRolesResponse(AuthenticationSuccessEvent $event):void
  56.     {
  57.         $data $event->getData();
  58.         $user $event->getUser();
  59.         if (!$user instanceof UserInterface) {
  60.             return;
  61.         }
  62.         $data['roles'] = $user->getRoles();
  63.         $event->setData($data);
  64.     }
  65. }