src/EventListener/JWTAuthSuccessListener.php line 24

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Entity\Security\User;
  5. use App\Service\Security\PasswordService;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class JWTAuthSuccessListener
  10. {
  11.     private $request;
  12.     public function __construct(
  13.         private RequestStack $requestStack,
  14.         private PasswordService $passwordService,
  15.     ) {
  16.         $this->request $this->requestStack->getCurrentRequest();
  17.     }
  18.     public function onJWTAuthSuccess(AuthenticationSuccessEvent $event): void
  19.     {
  20.         if ('foxorders_api_refresh_token' === $this->request->get('_route')) {
  21.             return;
  22.         }
  23.         try {
  24.             /** @var User $user */
  25.             $user $event->getUser();
  26.             if (false === $user instanceof UserInterface) {
  27.                 return;
  28.             }
  29.             if (null === $user->getPlainPassword() && false === property_exists(json_decode($this->request->getContent()), 'password')) {
  30.                 return;
  31.             }
  32.             $plainPassword = (null !== $user->getPlainPassword()) ? $user->getPlainPassword() : json_decode($this->request->getContent())->password;
  33.             $user->setPlainPassword($plainPassword);
  34.         } catch (\Exception $e) {
  35.             throw $e;
  36.         }
  37.     }
  38. }