src/EventSubscriber/StaffLoginSubscriber.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Management\StaffAccount;
  4. use Psr\Log\LoggerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter;
  7. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  8. class StaffLoginSubscriber implements EventSubscriberInterface
  9. {
  10.     private LoggerInterface $logger;
  11.     public function __construct(LoggerInterface $staffAuthLogger)
  12.     {
  13.         $this->logger $staffAuthLogger;
  14.     }
  15.     public static function getSubscribedEvents(): iterable
  16.     {
  17.         return [
  18.             InteractiveLoginEvent::class => 'onLogin',
  19.         ];
  20.     }
  21.     public function onLogin(InteractiveLoginEvent $event): void
  22.     {
  23.         $authenticationToken $event->getAuthenticationToken();
  24.         $user $authenticationToken->getUser();
  25.         if (!$user instanceof StaffAccount) {
  26.             return;
  27.         }
  28.         $request $event->getRequest();
  29.         $clientIp $request->getClientIp();
  30.         $mode in_array(AuthenticatedVoter::IS_AUTHENTICATED_REMEMBERED$authenticationToken->getRoleNames())
  31.             ? 'remember_me' 'password';
  32.         $this->logger->info('User {user} [{user_id}] authenticated with "{mode}".', [
  33.             'user' => $user->getUsername(),
  34.             'user_id' => $user->getId(),
  35.             'mode' => $mode,
  36.             'client_ip' => $clientIp,
  37.         ]);
  38.     }
  39. }