Перехват DisabledException при использовании Custom User Checker в Symfony 4.1

Я реализовал Custom User Checker в Symfony после это руководство. Мне это нужно, чтобы выполнить дополнительную проверку, чтобы определить, активна ли учетная запись, пытающаяся войти в систему.

Вот мой код User Checker:

class UserChecker implements UserCheckerInterface {

    public function checkPreAuth(UserInterface $user) {
        if (!$user->getUser()->getIsActive())  {
            throw new DisabledException("Account is disabled.");
        }  else  {
            return;
        }
    }

    public function checkPostAuth(UserInterface $user) {
        return;
    }
}

В этом случае объект $user, который передается DI, является просто оболочкой (которая реализует UserInterface) моего объекта User. У моего пользовательского объекта есть логический флаг isActive. если getIsActive возвращает false, мое условие отрицает это, и он должен выбросить DisabledException.

Однако это не то поведение, которое я наблюдаю. Если я вхожу в систему с активным пользователем, я могу войти в систему нормально. Если я вхожу в систему с отключенным пользователем, он просто возвращает меня обратно на экран входа в систему (без исключения).

Если я заменю DisabledException на просто Exception, возникает исключение, но я не вижу места в моем коде, где я мог бы его поймать, чтобы показать пользователю красивое сообщение «учетная запись отключена» над экраном входа в систему.

Я предполагаю, что Symfony где-то ловит и проглатывает DisabledException.

Вот мой security.yaml:

security:
    providers:
        db_provider:
            id: database_user_provider
    encoders:
        App\Utility\Security\DatabaseUser: bcrypt
    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: db_provider
                login_path: login
                check_path: process_login
                default_target_path: do_some_stuff
                use_referer: true
            user_checker: App\Utility\Security\UserChecker
            anonymous: ~
            logout:
                path: logout
                target: login

    access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/userRegister, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

Мой вопрос: где перехватывается это исключение / что мне нужно переопределить или реализовать, чтобы я мог отправить сообщение пользователю?

или

Где я могу поймать Exception, чтобы сделать то же самое?

На самом деле существует несколько способов справиться с этим, но я могу указать вам на более старую версию, но все еще действующую. stackoverflow.com/questions/37718670/…

EresDev 30.08.2018 02:53

@EresDev ... ага ... Это сработало. Спасибо!

mcmurphy 30.08.2018 20:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
606
0

Другие вопросы по теме