src/mywebsolutions/user-bundle/EventSubscriber/JWTRefreshCookieSubscriber.php line 52

Open in your IDE?
  1. <?php
  2. /**
  3.  * Class JWTRefreshCookieSubscriber
  4.  * @package MWS\UserBundle\EventSubscriber
  5.  * @author Martin Walther <martin@myweb.solutions>
  6.  *
  7.  * (c) MyWebSolutions
  8.  */
  9. namespace MWS\UserBundle\EventSubscriber;
  10. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTAuthenticatedEvent;
  11. use Lexik\Bundle\JWTAuthenticationBundle\Events;
  12. use Lexik\Bundle\JWTAuthenticationBundle\Security\Http\Authentication\AuthenticationSuccessHandler;
  13. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTManager;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. use Symfony\Component\Security\Core\User\UserInterface;
  18. class JWTRefreshCookieSubscriber implements EventSubscriberInterface
  19. {
  20.     private array $payload = [];
  21.     private UserInterface $user;
  22.     private JWTManager $jwtManager;
  23.     private array $cookieProviders;
  24.     /**
  25.      * @param JWTManager $jwtManager
  26.      * @param array $cookieProviders
  27.      */
  28.     public function __construct(JWTManager $jwtManager, array $cookieProviders = [])
  29.     {
  30.         $this->jwtManager $jwtManager;
  31.         $this->cookieProviders $cookieProviders;
  32.     }
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             Events::JWT_AUTHENTICATED => 'onAuthenticatedAccess',
  37.             KernelEvents::RESPONSE => 'onAuthenticatedResponse'
  38.         ];
  39.     }
  40.     public function onAuthenticatedAccess(JWTAuthenticatedEvent $event)
  41.     {
  42.         $this->payload $event->getPayload();
  43.         $this->user $event->getToken()->getUser();
  44.     }
  45.     public function onAuthenticatedResponse(ResponseEvent $event)
  46.     {
  47.         if ($this->payload && $this->user) {
  48.             $jwt $this->jwtManager->create($this->user);
  49.             $response $event->getResponse();
  50.             foreach ($this->cookieProviders as $cookieProvider) {
  51.                 $response->headers->setCookie($cookieProvider->createCookie($jwt));
  52.             }
  53.         }
  54.     }
  55. }