Отключение DisabledException при использовании Custom User Checker в Symfony 4.1 - PullRequest
0 голосов
/ 30 августа 2018

Я реализовал в Symfony Custom 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. Мой пользовательский объект имеет флаг bool 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, чтобы сделать то же самое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...