<?php
namespace App\EventListener;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Event\LogoutEvent;
class LogoutListener
{
/**
* @var TokenStorageInterface
*/
private TokenStorageInterface $tokenStorage;
/**
* @var RouterInterface
*/
private RouterInterface $router;
public function __construct(TokenStorageInterface $tokenStorage, RouterInterface $router)
{
$this->tokenStorage = $tokenStorage;
$this->router = $router;
}
public function onLogoutEvent(LogoutEvent $logoutEvent)
{
$user = $this->tokenStorage->getToken()->getUser();
$locale = $logoutEvent->getRequest()->get('_locale');
if (is_object($user)) {
$roles = $user->getRoles();
if (in_array('ROLE_BACKEND_USER', $roles, true) || $logoutEvent->getRequest()->get('_route') === "app_backend_logout") {
$logoutEvent->setResponse(new RedirectResponse($this->router->generate('backend_login', ['_locale' => $locale])));
}else{
$logoutEvent->setResponse(new RedirectResponse($this->router->generate('app_login', ['_locale' => $locale])));
}
}else{
$logoutEvent->setResponse(new RedirectResponse($this->router->generate('app_login', ['_locale' => $locale])));
}
}
}