Php 在Symfony 4.1中使用自定义用户检查器时捕获DisabledException
我在Symfony中实现了一个自定义用户检查器。我需要它来执行额外的检查,以确定尝试登录的帐户是否处于活动状态 这是我的用户检查代码:Php 在Symfony 4.1中使用自定义用户检查器时捕获DisabledException,php,symfony,authentication,Php,Symfony,Authentication,我在Symfony中实现了一个自定义用户检查器。我需要它来执行额外的检查,以确定尝试登录的帐户是否处于活动状态 这是我的用户检查代码: class UserChecker implements UserCheckerInterface { public function checkPreAuth(UserInterface $user) { if (!$user->getUser()->getIsActive()) { throw
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;
}
}
在本例中,DI传入的$user
对象只是我的用户对象的包装器(实现UserInterface)。我的用户对象有一个bool标志isActive
。如果getIsActive
返回false,我的条件将否定该值,并且它将抛出DisabledException
然而,这不是我看到的行为。如果我使用活动用户登录,我可以很好地登录。如果我使用禁用的用户登录,它只会将我返回到登录屏幕(不会引发异常)
如果我将DisabledException
更改为简单的Exception
,则会引发异常,但我在代码中看不到可以捕捉到异常的位置,因此我可以在登录屏幕上方向用户显示一条漂亮的“帐户已禁用”消息
我假设Symfony在某处捕捉并吞下了DisabledException
这是我的安全性。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 }
我的问题是:在哪里捕获异常/我需要覆盖或实现什么,以便向用户发送消息
或
在哪里可以捕获异常来执行相同的操作?实际上有多种方法可以处理此问题,但我可以为您指出的一种方法适用于旧版本,但仍然有效@埃雷斯德夫。。。是的。。。成功了。谢谢