src/EventListener/RequestListener.php line 26

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Entity\User\User;
  5. use App\Exception\BannedUserException;
  6. use Gesdinet\JWTRefreshTokenBundle\Model\RefreshTokenManagerInterface;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. class RequestListener
  10. {
  11.     private TokenStorageInterface $tokenStorage;
  12.     private RefreshTokenManagerInterface $refreshTokenManager;
  13.     public function __construct(
  14.         RefreshTokenManagerInterface $refreshTokenManager,
  15.         TokenStorageInterface $tokenStorage
  16.     )
  17.     {
  18.         $this->refreshTokenManager $refreshTokenManager;
  19.         $this->tokenStorage $tokenStorage;
  20.     }
  21.     public function onKernelRequest(RequestEvent $event)
  22.     {
  23.         if (!$event->isMasterRequest()) {
  24.             return;
  25.         }
  26.         if (!$token $this->tokenStorage->getToken()) {
  27.             return ;
  28.         }
  29.         if (!$token->isAuthenticated()) {
  30.             return ;
  31.         }
  32.         $user $token->getUser();
  33.         if ($user instanceof User && $user->getIsBlocked()) {
  34.             $refresh $this->refreshTokenManager->getLastFromUsername($user->getEmail());
  35.             if ($refresh) {
  36.                 $this->refreshTokenManager->delete($refresh);
  37.             }
  38.             throw new BannedUserException('Данный пользователь заблокирован');
  39.         }
  40.     }
  41. }