<?php
/**
* Created by PhpStorm.
* User: ursus
* Date: 14.05.19
* Time: 16:29
*/
namespace App\Service;
use JMS\Serializer\ArrayTransformerInterface;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Class JWTListener is used to add additional information into JWT token itself
* related to User entity serialisation config ( all fields marked by "token" group)
* @package App\EventListener
*/
class JWTDataExtender
{
/** @var ArrayTransformerInterface */
private $transformer;
public function __construct(ArrayTransformerInterface $transformer)
{
/** @var SerializerInterface serializer */
$this->transformer = $transformer;
}
public function onCreated(JWTCreatedEvent $event)
{
$data = $event->getData();
$user = $event->getUser();
if (!$user instanceof UserInterface) {
return;
}
$context = SerializationContext::create()
->setGroups('token');
$serialized = $this->transformer->toArray($user, $context);
$data = array_merge($data, $serialized);
$event->setData($data);
}
}