<?php// src/EventListener/AuthenticationSuccessListener.phpnamespace App\EventListener;use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;use Gesdinet\JWTRefreshTokenBundle\Model\RefreshTokenManagerInterface;use Symfony\Component\Security\Core\User\UserInterface;class AuthenticationSuccessListener{ private RefreshTokenManagerInterface $refreshTokenManager; private int $ttl; public function __construct(RefreshTokenManagerInterface $refreshTokenManager, int $ttl) { $this->refreshTokenManager = $refreshTokenManager; $this->ttl = $ttl; } public function onAuthenticationSuccess(AuthenticationSuccessEvent $event): void { $user = $event->getUser(); if (!$user instanceof UserInterface) { error_log("ERREUR: L'utilisateur n'est pas une instance de UserInterface"); return; } try { // Récupérer l'email $email = $this->getUserEmail($user); if (empty($email)) { throw new \RuntimeException("Impossible de récupérer l'email de l'utilisateur"); } error_log("AuthenticationSuccessListener: Email utilisé = " . $email); // Créer le refresh token $refreshToken = $this->refreshTokenManager->create(); $refreshToken->setUsername($email); $refreshToken->setRefreshToken(); $refreshToken->setValid((new \DateTime())->modify('+' . $this->ttl . ' seconds')); error_log("AuthenticationSuccessListener: Refresh token créé"); $this->refreshTokenManager->save($refreshToken); error_log("AuthenticationSuccessListener: Refresh token sauvegardé"); // Ajouter le refresh token à la réponse $data = $event->getData(); $data['success'] = true; $data['refresh_token'] = $refreshToken->getRefreshToken(); $event->setData($data); } catch (\Exception $e) { error_log("ERREUR AuthenticationSuccessListener: " . $e->getMessage()); // En cas d'erreur, on retourne quand même le JWT mais sans refresh token $data = $event->getData(); $data['success'] = true; $data['warning'] = 'Connexion réussie mais le refresh token n\'a pas pu être créé'; $event->setData($data); } } private function getUserEmail(UserInterface $user): ?string { if (method_exists($user, 'getUserIdentifier')) { return $user->getUserIdentifier(); } if (method_exists($user, 'getEmail')) { return $user->getEmail(); } if (method_exists($user, 'getUsername')) { return $user->getUsername(); } return null; }}