<?php
namespace App\EventSubscriber\Security;
use App\Entity\User\User;
use App\Service\Security\LoginService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\LoginFailureEvent;
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
class SaveLoginSubscriber implements EventSubscriberInterface
{
private LoginService $loginService;
public function __construct(LoginService $loginService)
{
$this->loginService = $loginService;
}
public static function getSubscribedEvents(): array
{
return [
LoginSuccessEvent::class => 'onLoginSuccess',
LoginFailureEvent::class => 'onLoginFailure',
];
}
public function onLoginSuccess(LoginSuccessEvent $event): void
{
/** @var User $user */
$user = $event->getUser();
$this->loginService->registerLogin($user, $event->getRequest(), true);
}
public function onLoginFailure(LoginFailureEvent $event): void
{
/** @var User $user */
$user = $event->getPassport()->getUser();
$this->loginService->registerLogin($user, $event->getRequest(), false);
}
}