src/EventSubscriber/RefreshTokenSubscriber.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Monolith\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Gesdinet\JWTRefreshTokenBundle\Event\RefreshEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  8. class RefreshTokenSubscriber implements EventSubscriberInterface
  9. {
  10.     public function __construct(
  11.         private EntityManagerInterface $entityManager
  12.     ) {
  13.     }
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         return [
  17.             'gesdinet.refresh_token' => 'onRefreshToken',
  18.         ];
  19.     }
  20.     public function onRefreshToken(RefreshEvent $event): void
  21.     {
  22.         $refreshToken $event->getRefreshToken();
  23.         if (null !== $refreshToken->getHash()) {
  24.             $user $this->entityManager->getRepository(User::class)->findOneBy(['email' => $refreshToken->getUsername()]);
  25.             if (sha1($user?->getPassword()) !== $refreshToken->getHash()) {
  26.              throw new AuthenticationException('The password does not match.');
  27.             }
  28.         }
  29.     }
  30. }