src/EventListener/JWTDecodedListener.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Monolith\User;
  4. use App\Repository\UserRepository;
  5. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTDecodedEvent;
  6. class JWTDecodedListener
  7. {
  8.     private UserRepository $userRepository;
  9.     public function __construct(UserRepository $userRepository)
  10.     {
  11.         $this->userRepository $userRepository;
  12.     }
  13.     public function onJWTDecoded(JWTDecodedEvent $event): void
  14.     {
  15.         $payload $event->getPayload();
  16.         $user $this->userRepository->findOneBy(['email' => $payload['email']]);
  17.         if (!$this->isPayloadAndPasswordValid($payload$user)) {
  18.             $event->markAsInvalid();
  19.         }
  20.     }
  21.     private function isPayloadAndPasswordValid(array $payload, ?User $user): bool
  22.     {
  23.         $password $user?->getPassword();
  24.         if (!$password || !isset($payload['hash'])) {
  25.             return false;
  26.         }
  27.         return sha1($password) === $payload['hash'];
  28.     }
  29. }