src/EventSubscriber/AuthenticationSuccessSubscriber.php
<?php
declare(strict_types = 1);
/**
* /src/EventSubscriber/AuthenticationSuccessSubscriber.php
*
* @author TLe, Tarmo Leppänen <tarmo.leppanen@pinja.com>
*/
namespace App\EventSubscriber;
use App\Enum\LogLogin;
use App\Repository\UserRepository;
use App\Utils\LoginLogger;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Events;
use Override;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Throwable;
/**
* @package App\EventSubscriber
* @author TLe, Tarmo Leppänen <tarmo.leppanen@pinja.com>
*/
class AuthenticationSuccessSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly LoginLogger $loginLogger,
private readonly UserRepository $userRepository,
) {
}
/**
* {@inheritdoc}
*
* @return array<string, string>
*/
#[Override]
public static function getSubscribedEvents(): array
{
return [
AuthenticationSuccessEvent::class => 'onAuthenticationSuccess',
Events::AUTHENTICATION_SUCCESS => 'onAuthenticationSuccess',
];
}
/**
* Method to log user successfully login to database.
*
* This method is called when following event is broadcast
* - lexik_jwt_authentication.on_authentication_success
*
* @throws Throwable
*/
public function onAuthenticationSuccess(AuthenticationSuccessEvent $event): void
{
$this->loginLogger
->setUser($this->userRepository->loadUserByIdentifier($event->getUser()->getUserIdentifier(), true))
->process(LogLogin::SUCCESS);
}
}