如果用户类实现isEnabled
,Symfony提供了一种阻止用户使用AdvancedUserInterface
属性登录的简单方法。
但是,如果用户登录,则会阻止他们访问网站,直到他们的会话到期为止。
想法是在获取用户实体(isEnabled
)时检查$this->get('security.token_storage')->getToken()->getUser()
属性,然后使会话无效。这样做的首选方式是什么?
或者有更好的方法来实现这一目标吗?
答案 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
。用户对象是反序列化的,然后刷新。然后,您可以在刷新方法中执行任何操作,包括从数据库重新加载它并检查用户是否被禁止。