src/Service/JWTDataExtender.php line 33

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: ursus
  5.  * Date: 14.05.19
  6.  * Time: 16:29
  7.  */
  8. namespace App\Service;
  9. use JMS\Serializer\ArrayTransformerInterface;
  10. use JMS\Serializer\SerializationContext;
  11. use JMS\Serializer\SerializerInterface;
  12. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  13. use Symfony\Component\Security\Core\User\UserInterface;
  14. /**
  15.  * Class JWTListener is used to add additional information into JWT token itself
  16.  * related to User entity serialisation config ( all fields marked by "token" group)
  17.  * @package App\EventListener
  18.  */
  19. class JWTDataExtender
  20. {
  21.     /** @var ArrayTransformerInterface */
  22.     private $transformer;
  23.     public function __construct(ArrayTransformerInterface $transformer)
  24.     {
  25.         /** @var SerializerInterface serializer */
  26.         $this->transformer $transformer;
  27.     }
  28.     public function onCreated(JWTCreatedEvent $event)
  29.     {
  30.         $data $event->getData();
  31.         $user $event->getUser();
  32.         if (!$user instanceof UserInterface) {
  33.             return;
  34.         }
  35.         $context SerializationContext::create()
  36.             ->setGroups('token');
  37.         $serialized $this->transformer->toArray($user$context);
  38.         $data array_merge($data$serialized);
  39.         $event->setData($data);
  40.     }
  41. }