Возможно, вы правы, что проблема может быть связана с функцией запомнить меня, так как при этом будут использоваться файлы cookie для хранения токена вместо сеанса, и, следовательно, необходим другой LogoutHandler.
Symfony предоставляетнесколько способов обработки аутентификации, и вам потребуются правильные LogoutHandler (s) в зависимости от ваших текущих настроек.
Решение вашей проблемы на удивление трудное, если вы не просто хотите перенаправить пользователя к пути выхода из системы.«Лучший» способ, о котором я могу думать прямо сейчас, - это имитировать запрос на выход из системы, создавая объект Request вручную, а затем отправляя с ним GetResponseEvent, так что будет запущен LogoutListener.Отправка события может иметь странные побочные эффекты, так что вы можете даже захотеть вызвать слушателя напрямую.Это может выглядеть примерно так:
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\Security\Http\Firewall\ListenerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class MyController
{
private $kernel;
private $logoutListener;
public function __construct(HttpKernelInterface $kernel, LogoutListenerInterface $logoutListener)
{
$this->kernel = $kernel;
$this->logoutListener = $logoutListener;
}
private function customLogout()
{
// This needs to be updated whenever the logout path in your security.yaml changes. Probably something you want to improve on.
$request = Request::create('/logout');
$event = new GetResponseEvent($this->kernel, $request);
$this->logoutListener->handle($event);
}
public function someAction()
{
$this->customLogout();
// Do whatever you want to do for your request
}
}
Я не думаю, что это хорошее решение, поскольку вмешательство в систему безопасности само по себе опасно.Непосредственный вызов LogoutListener и передача ядра также немного ненадежны.Честно говоря, я даже не уверен на 100%, что это сработает, но это самое близкое к тому, что я мог бы предложить в качестве возможного решения вашей проблемы.Возможно, вы захотите переосмыслить то, что вы делаете, и найти альтернативный подход.