如何在 Symfony 中注销被禁止的用户?
How to log out a banned user in Symfony?
如果用户 class 实现了 AdvancedUserInterface
.
,Symfony 提供了一种防止用户使用 isEnabled
属性 登录的简单方法
但是,如果用户已登录,则在会话过期之前,没有任何事情会阻止他们访问该网站。
想法是在获取用户实体 ($this->get('security.token_storage')->getToken()->getUser()
) 时检查 isEnabled
属性,然后使会话无效。这样做的首选方式是什么?
或者有更好的方法来实现这个目标吗?
也许在控制器执行之前捕获请求(我认为有一个侦听器),检查他的帐户是否被阻止,如果是真的,只需做出 403 响应并 hasta la vista baby
更好的方法是将它们重定向到由安全系统处理的 logout
url。您可以通过创建一个侦听 kernel.request
事件的侦听器来实现。 Here is a gist 我大约一个月前创建的,它提供了这样的功能..
您可以在 security.yml
中设置以下内容:
security:
always_authenticate_before_granting: true
这将始终在将信息存储到令牌之前重新验证用户。它将处理用户配置中的此类更改,以及更改角色等。
您可以使用自定义用户提供程序执行此操作(如果您已经在使用自定义用户提供程序,这是一个简单的更改)。
http://symfony.com/doc/current/cookbook/security/custom_provider.html
loadUserByUsername
在用户登录时调用。
refreshUser
在每个后续请求中调用。用户对象被反序列化,然后刷新。然后你可以在刷新方法中做任何你想做的事情,包括从数据库重新加载它并检查用户是否被禁止。
如果用户 class 实现了 AdvancedUserInterface
.
isEnabled
属性 登录的简单方法
但是,如果用户已登录,则在会话过期之前,没有任何事情会阻止他们访问该网站。
想法是在获取用户实体 ($this->get('security.token_storage')->getToken()->getUser()
) 时检查 isEnabled
属性,然后使会话无效。这样做的首选方式是什么?
或者有更好的方法来实现这个目标吗?
也许在控制器执行之前捕获请求(我认为有一个侦听器),检查他的帐户是否被阻止,如果是真的,只需做出 403 响应并 hasta la vista baby
更好的方法是将它们重定向到由安全系统处理的 logout
url。您可以通过创建一个侦听 kernel.request
事件的侦听器来实现。 Here is a gist 我大约一个月前创建的,它提供了这样的功能..
您可以在 security.yml
中设置以下内容:
security:
always_authenticate_before_granting: true
这将始终在将信息存储到令牌之前重新验证用户。它将处理用户配置中的此类更改,以及更改角色等。
您可以使用自定义用户提供程序执行此操作(如果您已经在使用自定义用户提供程序,这是一个简单的更改)。
http://symfony.com/doc/current/cookbook/security/custom_provider.html
loadUserByUsername
在用户登录时调用。
refreshUser
在每个后续请求中调用。用户对象被反序列化,然后刷新。然后你可以在刷新方法中做任何你想做的事情,包括从数据库重新加载它并检查用户是否被禁止。