Новое в Symfony 5.1: Более простая настройка выхода

Несколько месяцев назад начали масштабную работу по улучшению всего компонента Symfony Security и его интеграции с остальной частью платформы Symfony. Все еще работаем над самыми большими изменениями, но уже закончили некоторые небольшие улучшения.

Текущий LogoutListener может использоваться для запуска некоторой логики после выхода пользователя из приложения (например, для аннулирования некоторых токенов). Несмотря на то, что он содержит некоторые точки расширения, он не очень удобен для DX (DX = опыт разработчика) и делает невозможным такие вещи, как перезапись функций выхода по умолчанию из пакета.

В Symfony 5.1 улучшили эту функцию с введением нового LogoutEvent, который заменяет существующие LogoutSuccessHandlerInterface и LogoutHandlerInterface.

Новое событие выхода из системы отправляется как глобальному диспетчеру, так и диспетчеру межсетевого экрана (имя которого соответствует шаблону security.event_dispatcher.FIREWALLNAME). Например, чтобы зарегистрировать прослушиватель для события выхода из системы только на главном брандмауэре, используйте эту конфигурацию:

# config/services.yaml
services:
    # ...
    App\EventListener\MyCutomLogoutListener:
        tags:
            - name: 'kernel.event_listener'
              event: 'Symfony\Component\Security\Http\Event\LogoutEvent'
              dispatcher: security.event_dispatcher.main

Объект Symfony\Component\Security\Http\Event\LogoutEvent, полученный слушателем, содержит полезные методы, такие как getToken() (для получения токена безопасности сеанса), getRequest() и setResponse().