1

我正在使用每个登录用户每 5 秒调用一次的 keepalive 方法在我的流星应用程序中跟踪我的登录用户。

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

在我将 Meteor 更新到 0.6.5 之前,为了防止有人使用已经登录的用户名登录,我已将以下代码添加到 pacakge 中的password_server.js文件中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 信号。

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

4

2 回答 2

0

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

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

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

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

于 2014-02-26T14:55:27.560 回答
0

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

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

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

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

于 2013-09-29T12:07:43.557 回答