Php 如何防止被阻止的用户登录Symfony2?

Php 如何防止被阻止的用户登录Symfony2?,php,symfony,Php,Symfony,我有一个包含用户信息的用户表,其中包含一个“已阻止”列。我有一个可以阻止用户的界面,它将block列的值设置为1。现在,当用户登录时(这是通过检查用户名和密码在Symfony2中自动完成的),我将它们重定向到一个控制器,该控制器检查用户是否被数据库阻止,并在会话中设置错误消息。 然后我重定向到注销功能,该功能将用户注销并重定向到登录页面。现在,问题是,当用户注销时,会话被破坏,因此我无法通知用户他已被阻止 关于如何更好地实现它,您有什么建议吗?您必须检查用户登录时是否被阻止。如果用户被阻止,登录

我有一个包含用户信息的用户表,其中包含一个“已阻止”列。我有一个可以阻止用户的界面,它将block列的值设置为1。现在,当用户登录时(这是通过检查用户名和密码在Symfony2中自动完成的),我将它们重定向到一个控制器,该控制器检查用户是否被数据库阻止,并在会话中设置错误消息。 然后我重定向到注销功能,该功能将用户注销并重定向到登录页面。现在,问题是,当用户注销时,会话被破坏,因此我无法通知用户他已被阻止


关于如何更好地实现它,您有什么建议吗?

您必须检查用户登录时是否被阻止。如果用户被阻止,登录失败并显示“您被阻止”消息

如果阻止登录的用户,则必须刷新用户会话。刷新页面时,他将自动注销

具有发展这种行为的功能。

Symfony为此功能提供了。它提供了以下几种附加方法:

public Boolean isAccountNonLocked()
public Boolean isEnabled()

这些方法将在登录之前被调用(显然是在您的用户实体上)。例如,如果
isEnabled
返回false,则用户将无法登录。你可以用它们来实现被阻止的用户。

好了,我终于可以做我想做的事了。
受此启发,我成功地使用户凭据、会话无效,然后在重定向之前放置了一条错误消息。

您应该在loginI理解之前进行检查,但我需要访问用户对象以检查用户是否被阻止。如果每个用户的用户名都是唯一的,当用户在登录到symfony2时插入用户名和密码,您可以检查用户是否被阻止,这是目前我最不担心的问题。我只是想阻止下次登录。另外,我不想使用FOS捆绑包。你不应该告诉用户他在注销时被阻止,而是在登录时被阻止!但是,当你手动将用户注销时,你可以将用户重定向到/login,而不是/blocked route。如果你阅读了我的问题描述,我不会这样做。重定向到登录页面或任何其他页面都不是问题。问题是在使登录的凭据无效后维护会话消息。@由于会话在注销时失效,因此无法立即维护会话。但是,您可以覆盖symfony2注销操作并将消息复制到新会话。它暂时有效,但我肯定必须更优雅地重做。谢谢你抽出时间。谢谢!:-)我知道这些,但不确定它的用途。我将来肯定会实现这些内置方法。谢谢你的帮助!:-)根据您的建议,我让isAccountNonlock()函数使用isblocked()返回true或false,具体取决于用户是否被阻止。我的代码现在干净多了。再次感谢您的帮助。:-)我很高兴能帮助你;)