src/Core/Application/EventSubscriber/Security/LoginSuccessSubscriber.php line 58
<?phpdeclare(strict_types=1);namespace App\Core\Application\EventSubscriber\Security;use App\Core\Domain\Entity\Student\Student;use App\Core\Domain\Exception\InvalidStudentTokenException;use DateTimeImmutable;use Doctrine\ORM\EntityManagerInterface;use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTAuthenticatedEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Security\Http\Event\LoginSuccessEvent;use Symfony\Component\Uid\Uuid;class LoginSuccessSubscriber implements EventSubscriberInterface{private EntityManagerInterface $em;public function __construct(EntityManagerInterface $entityManager, private readonly RequestStack $requestStack){$this->em = $entityManager;}public static function getSubscribedEvents(): array{return ['lexik_jwt_authentication.on_authentication_success' => 'onAuthenticationSuccessResponse','lexik_jwt_authentication.on_jwt_authenticated' => 'onJWTAuthenticated',LoginSuccessEvent::class => 'onLoginSuccess'];}public function onLoginSuccess(LoginSuccessEvent $event): void{$user = $event->getUser();if (method_exists($user, 'setLastLoginDate')) {$user->setLastLoginDate(new DateTimeImmutable());$this->em->flush();}}public function onJWTAuthenticated(JWTAuthenticatedEvent $event): void{$request = $this->requestStack->getCurrentRequest();if ($request !== null) {/** @var Student $student */$student = $event->getToken()->getUser();$token = $request->headers->get('X-STUDENT-TOKEN');if ($student->getStudentToken()->__toString() !== $token && $student->getStudentToken() !== null) {throw new InvalidStudentTokenException('The token is invalid.');}}}public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event): void{/** @var Student $user */$user = $event->getUser();$data = $event->getData();$token = Uuid::v4();$user->setStudentToken($token);$data['studentToken'] = $user->getStudentToken()->__toString();$event->setData($data);}}