<?php
namespace App\Events;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use App\Entity\User;
use App\Repository\ClientRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class JwtCreatedSubscriber implements EventSubscriberInterface
{
private ClientRepository $clientRepository;
public function __construct(ClientRepository $clientRepository)
{
$this->clientRepository = $clientRepository;
}
public static function getSubscribedEvents()
{
return [
JWTCreatedEvent::class => 'updateJwtData',
];
}
public function updateJwtData(JWTCreatedEvent $event)
{
$user = $event->getUser();
$data = $event->getData();
$roles = $user->getRoles();
$userrole = $roles[0];
// Vérifier si l'utilisateur est bien une instance de User
if (!$user instanceof User) {
return;
}
// Ajouter les infos de l'utilisateur
$data['id'] = $user->getId();
$data['email'] = $user->getEmail();
$data['role']=$userrole;
// Récupérer le client depuis le repository
$client = $this->clientRepository->findOneBy(['user' => $user]);
if ($client) {
$data['client'] = [
'id' => $client->getId(),
'nom' => $client->getNom(),
];
} else {
$data['client'] = null;
}
$event->setData($data);
}
}