Meteor:每个用户只允许一个客户端实例

时间:2015-09-08 14:46:04

标签: meteor

有没有办法阻止用户在两个标签页或浏览器中打开Meteor网站?

我正在尝试在Meteor中创建一个纸牌游戏,我想"赶上"如果用户试图在另一个标签页或浏览器中打开该页面,并警告他已经打开了另一个客户端实例,并且可能给他/她选择在所有实例中注销等等。

我已经用Google搜索了,但没有运气。

3 个答案:

答案 0 :(得分:5)

如果要求用户登录:

  • 保存与Connections集合的连接以及用户ID。 (或者配置文件本身的roomId,具体取决于您的架构)
  • 断开断开连接
  • 在每个新连接上,查看用户ID是否已存在于Connections集合

如果用户不必登录:

  • 将连接保存到Connections集合(以及用户IP)
  • 断开断开连接
  • 在每个新连接上,查看Connections集合
  • 中是否已存在IP地址

在野外使用onConnection的示例(请注意,我不允许多个连接,但这只是另外5行代码):https://github.com/mattkrick/react-tac-toe/blob/master/server/gameState.jsx#L13

文档(即如何捕获IP地址):http://docs.meteor.com/#/full/meteor_onconnection

答案 1 :(得分:1)

这是一个非常方便的程序包,用于跟踪设备间的IP地址和会话:mizzao:user-status。这为用户的文档(您需要发布到客户端)添加了一个密钥,详细说明了他们的连接,无论它们是否处于活动状态,IP地址,甚至是用户代理。您甚至可以观察此键的更改,以便从第一个会话中检测到用户还连接了第二个会话,反之亦然。

答案 2 :(得分:0)

正如MichelFloyd在上面的聊天中所说的那样。我按照他的指示尝试了下面的内容。

使用

添加包

$ meteor add mizzao:user-status

<强>代码:

Accounts.onLogin(function(user){
  UserStatus.events.on("connectionLogin", function(fields) {
    $count = UserStatus.connections.find({userId : fields.userId}).count();
    console.log('Total log ins : ' + $count);
  });
});
  1. 当我打开多个浏览器时,计数继续增加,当我逐个关闭浏览器时,计数继续减少。
  2. 您可以使用此计数来监控登录的用户数。
  3. 您可以follow here查看已解决的整个方案。