Я реализовал 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, чтобы сделать то же самое?
@EresDev ... ага ... Это сработало. Спасибо!






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