src/Subscriber/AuthenticationSuccessSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Subscriber;
  4. use App\Entity\Admin;
  5. use App\Entity\User;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Events;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. class AuthenticationSuccessSubscriber implements EventSubscriberInterface
  13. {
  14.     private EntityManagerInterface $entityManager;
  15.     private RequestStack $requestStack;
  16.     public function __construct(
  17.         EntityManagerInterface $entityManager,
  18.         RequestStack $requestStack
  19.     ) {
  20.         $this->entityManager $entityManager;
  21.         $this->requestStack $requestStack;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             Events::AUTHENTICATION_SUCCESS => ['onAuthenticationSuccess'],
  27.         ];
  28.     }
  29.     public function onAuthenticationSuccess(AuthenticationSuccessEvent $event): void
  30.     {
  31.         $user $event->getUser();
  32.         if ($user instanceof User) {
  33.             $user->setLastLoginAt(new \DateTimeImmutable());
  34.             $this->entityManager->persist($user);
  35.             $this->entityManager->flush($user);
  36.         }
  37.         if (!($user instanceof Admin)) {
  38.             return;
  39.         }
  40.         /** @var Request $request */
  41.         $request $this->requestStack->getCurrentRequest();
  42.         $meta = [
  43.             'admin' => [
  44.                 'id'       => $user->getId()->toString(),
  45.                 'username' => $user->getUsername(),
  46.                 'email'    => $user->getEmail()
  47.             ],
  48.             'client_ip'  => $request->getClientIp(),
  49.             'user_agent' => $request->headers->get('User-Agent''unknown')
  50.         ];
  51.         $connection = (new Admin\Connection())
  52.             ->setAdmin($user)
  53.             ->setClientIp($meta['client_ip'])
  54.             ->setUserAgent($meta['user_agent'])
  55.             ->setMeta($meta);
  56.         $this->entityManager->persist($connection);
  57.         $this->entityManager->flush($connection);
  58.     }
  59. }