src/Flexy/ShopBundle/EventSubscriber/JWTCreatedListener.php line 28
<?php
// src/App/EventListener/JWTDecodedListener.php
namespace App\Flexy\ShopBundle\EventSubscriber;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTDecodedEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\User;
use App\Flexy\ShopBundle\Entity\Customer\Customer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
class JWTCreatedListener{
public function __construct(private readonly RequestStack $requestStack, private readonly EntityManagerInterface $entityManager)
{
}
/**
* @return void
*/
public function onJWTCreated(JWTCreatedEvent $event)
{
$encoders = [new XmlEncoder(), new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$request = $this->requestStack->getCurrentRequest();
$payload = $event->getData();
$payload['ip'] = $request->getClientIp();
$user = $this->entityManager->getRepository(User::class)->findOneBy(["username"=>$payload['username']]);
$customer = $this->entityManager->getRepository(Customer::class)->findOneBy(["user"=>$user]);
$customerPayload = [];
if($customer){
$customerPayload =[
"id"=>$customer->getId(),
"firstName"=>$customer->getFirstName(),
"lastName"=>$customer->getLastName(),
"email"=>$customer->getEmail(),
"address"=>$customer->getAddress(),
"phone"=>$customer->getPhone(),
];
}
$payload["customer"]= $customerPayload ;
$event->setData($payload);
$header = $event->getHeader();
$event->setHeader($header);
}
}