【发布时间】:2017-05-16 09:38:26
【问题描述】:
有没有办法阻止用户在两个标签页或浏览器中打开 Meteor 网站?
我正在尝试在 Meteor 中创建纸牌游戏,如果用户尝试在另一个选项卡或浏览器中打开页面,我想“捕捉”并警告他另一个客户端实例已经打开并且可能给他/她在所有情况下都可以选择注销,等等。
我已经用谷歌搜索过了,但没有运气。
【问题讨论】:
标签: meteor
有没有办法阻止用户在两个标签页或浏览器中打开 Meteor 网站?
我正在尝试在 Meteor 中创建纸牌游戏,如果用户尝试在另一个选项卡或浏览器中打开页面,我想“捕捉”并警告他另一个客户端实例已经打开并且可能给他/她在所有情况下都可以选择注销,等等。
我已经用谷歌搜索过了,但没有运气。
【问题讨论】:
标签: meteor
如果用户需要登录:
Connections 集合。 (或个人资料本身的 roomId,具体取决于您的架构)Connections 集合中如果用户不必登录:
Connections 集合(连同用户 IP)Connections 集合中一个在野外使用 onConnection 的例子(注意我并没有禁止多个连接,但这只是另外 5 行代码):https://github.com/mattkrick/react-tac-toe/blob/master/server/gameState.jsx#L13
文档(即如何获取ip地址):http://docs.meteor.com/#/full/meteor_onconnection
【讨论】:
FlowRouter.go('/multi-login-error');github.com/kadirahq/…
有一个非常方便的包用于跨设备跟踪 IP 地址和会话:mizzao:user-status。这会在用户文档(您需要将其发布到客户端)中添加一个密钥,详细说明他们的连接、它们是否处于活动状态、IP 地址,甚至是用户代理。您甚至可以观察此键的更改,以从第一个会话中检测用户还连接了第二个会话,反之亦然。
【讨论】:
UserStatus 集合 - 每个活动连接都有一个文档。您可以在登录 UserStatus.events.on("connectionLogin",.... 时实现回调,以搜索当前用户的 UserStatus 集合。如果您不止一次找到他/她,请采取行动。
正如 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);
});
});
您可以follow here查看已解决的整个场景。
【讨论】: