使用FOSUserBundle防止重复登录

时间:2012-11-22 14:12:20

标签: mongodb symfony fosuserbundle

我们的应用程序使用 Symfony 2.0 MongoDB FOSUserBundle 进行用户管理。

客户希望阻止在其应用中同时使用来自其他设备的相同用户名登录。

我们的想法是在成功登录时为同一用户无效/删除所有其他会话。

问题是,我们无法在DB中保存会话,因为稍后在版本2.1中添加了Mongo会话处理程序。

我们提出的唯一解决方案是迭代保存在文件系统中的会话文件,并检查用户的用户名是否保存在该文件中。如果是这样,我们只是删除文件,其他位置的登录会话终止。当然,我们必须检查我们是否也不删除当前会话。

有没有人更清楚如何解决问题? 如果没有,是否有任何我们应该知道的隐藏陷阱?

1 个答案:

答案 0 :(得分:4)

您可以将IP地址列添加到用户实体,该用户实体在登录时存储当前用户的IP。在每个页面加载(通过事件监听器),您可以检查存储在DB中的IP与请求页面的人的IP。如果数据库中的IP与当前用户的IP(从其他位置登录的某个人)不匹配,请将其注销。

为了更进一步,通过ajax,您可以每隔X秒调用一次执行相同类型检查的服务器,并在ajax请求返回错误匹配时执行重定向以将用户注销。