防止在meteor中使用相同的用户名重复登录

时间:2013-09-28 18:07:12

标签: javascript meteor

我使用keepalive方法跟踪我的meteor应用程序中的登录用户,每个登录用户每5秒钟调用一次。

它会更新一个mongo集合,该集合使用“上次看到的”时间戳保存用户ID。

直到我将Meteor更新为0.6.5,为了防止有人使用已登录的用户名登录,我已将以下代码添加到password_server.js pacakge中的account-password文件中:

var alreadyConnected=false;
    Meteor.call("isUserConnected", user._id, function(err, result) {
      alreadyConnected=result;
    });
if(alreadyConnected)throw new Meteor.Error(403, "User Already Connected");

之后:

 var user = Meteor.users.findOne(selector);
  if (!user)
    throw new Meteor.Error(403, "User not found");

* isUserConnected是我在服务器代码中创建的一种方法,用于检查用户是否在过去5秒内发送了keepalive信号。

更新后,它停止工作,我不再知道如何编辑包文件..

2 个答案:

答案 0 :(得分:0)

使用keepalive来跟踪用户是否连接效率低下。您可以使用我的用户状态包来跟踪连接的套接字,例如:

  

https://github.com/mizzao/meteor-user-status

其次,允许客户端确定是否应该允许他连接是不安全的(除其他外,导致延迟并要求所有用户都发布到客户端。)你应该这样做这通过在服务器端添加一个新的登录处理程序来检查用户名以及是否已连接此用户,如果是,则拒绝登录。请参阅以下包,了解如何定义新的登录处理程序并从客户端调用它们:

  

https://github.com/mizzao/meteor-accounts-testing

答案 1 :(得分:0)

使用Meteor帐户,您可以使用他们的官方logoutotherclients方法

  

注销以当前用户身份登录的其他客户端,但不记录   调出此函数的客户端。

例如,在用户浏览器中调用时,该浏览器中的连接仍会保持登录状态,但以该用户身份登录的任何其他浏览器或DDP客户端都将被注销。

请注意:如果您需要从服务器端处理更强大的内容,则必须从客户端调用此选项。