src/EventSubscriber/StaffLoginSubscriber.php line 28

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