src/EventSubscriber/CheckVerifiedUserSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Entity\Security\User;
  5. use App\Service\Session\SessionService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
  9. use Symfony\Component\Security\Http\Authenticator\Passport\UserPassportInterface;
  10. use Symfony\Component\Security\Http\Event\CheckPassportEvent;
  11. class CheckVerifiedUserSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(
  14.         private SessionService $sessionService,
  15.     ) {
  16.     }
  17.     public function onCheckPassport(CheckPassportEvent $event): void
  18.     {
  19.         $passport $event->getPassport();
  20.         if (!$passport instanceof UserPassportInterface) {
  21.             throw new \Exception('Unexpected passport type'Response::HTTP_BAD_REQUEST);
  22.         }
  23.         $user $passport->getUser();
  24.         if (!$user instanceof User) {
  25.             throw new \Exception('Unexpected user type'Response::HTTP_BAD_REQUEST);
  26.         }
  27.         if (!$user->isVerified()) {
  28.             throw new CustomUserMessageAuthenticationException(
  29.                 'Veuillez activer votre compte avant de vous connecter.',
  30.                 [],
  31.                 Response::HTTP_BAD_REQUEST
  32.             );
  33.         }
  34.         $this->sessionService->switchUser($user);
  35.     }
  36.     public static function getSubscribedEvents()
  37.     {
  38.         return [
  39.             CheckPassportEvent::class => ['onCheckPassport', -10],
  40.         ];
  41.     }
  42. }