<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class LastLoginSubscriber implements EventSubscriberInterface
{
/** @var EntityManagerInterface */
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin',
];
}
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$ip = $event->getRequest()->getClientIp();
$user = $event->getAuthenticationToken()->getUser();
if (!$user instanceof User) {
return;
}
$user->setLastLoginAt(new \DateTime('now'));
$user->setLastLoginFrom($ip);
$this->entityManager->flush();
}
}