Php 如何在Symfony中注销被禁止的用户?

Php 如何在Symfony中注销被禁止的用户?,php,symfony,session,block,Php,Symfony,Session,Block,如果用户类实现了AdvancedUserInterface,Symfony提供了一种简单的方法来防止用户使用isEnabled属性登录 但是,如果用户登录,在会话到期之前,任何内容都不会阻止他们访问网站 想法是在获取用户实体($this->get('security.token\u storage')->getToken()->getUser())时检查isEnabled属性,然后使会话无效。这样做的首选方式是什么 或者有更好的方法来实现这个目标吗?也许在控制器执行之前捕获请求(我认为有一个侦听

如果用户类实现了
AdvancedUserInterface
,Symfony提供了一种简单的方法来防止用户使用
isEnabled
属性登录

但是,如果用户登录,在会话到期之前,任何内容都不会阻止他们访问网站

想法是在获取用户实体(
$this->get('security.token\u storage')->getToken()->getUser()
)时检查
isEnabled
属性,然后使会话无效。这样做的首选方式是什么


或者有更好的方法来实现这个目标吗?

也许在控制器执行之前捕获请求(我认为有一个侦听器),检查他的帐户是否被阻止,如果是真的,只需做出403响应,hasta la vista baby

更好的方法是将他们重定向到
注销
url,该url由安全系统处理。您可以通过创建侦听
kernel.request
事件的侦听器来实现这一点。这是我大约一个月前创建的,它提供了这样的功能。

您可以在
security.yml中设置以下内容:

security:
    always_authenticate_before_granting: true

这将始终在将信息存储到令牌之前重新验证用户。它将处理用户配置中的此类更改,但也会处理角色更改等问题。

您可以使用自定义用户提供程序来完成此操作(如果您已经在使用自定义用户提供程序,则这是一个简单的更改)

loadUserByUsername
在用户登录时被调用

refreshUser
在每次后续请求时都被调用。用户对象被取消序列化,然后刷新。然后,您可以在刷新方法中执行任何您想要的操作,包括从数据库重新加载该方法,并检查该用户是否被禁止