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

时间:2015-06-29 19:42:30

标签: php symfony session block

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

但是,如果用户登录,则会阻止他们访问网站,直到他们的会话到期为止。

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

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

security:
    always_authenticate_before_granting: true

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

答案 2 :(得分:0)

更好的方法是将它们重定向到由安全系统处理的logout网址。您可以通过创建侦听kernel.request事件的侦听器来完成此操作。我在一个月前创建的Here is a gist,它提供了这样的功能..

答案 3 :(得分:0)

您可以使用自定义用户提供商执行此操作(如果您已经使用过,则可以轻松更改)。

http://symfony.com/doc/current/cookbook/security/custom_provider.html

用户登录时会调用

loadUserByUsername

每次后续请求都会调用

refreshUser。用户对象是反序列化的,然后刷新。然后,您可以在刷新方法中执行任何操作,包括从数据库重新加载它并检查用户是否被禁止。