如何限制登录Meteor帐户的设备数量?

时间:2014-06-11 09:04:04

标签: javascript login meteor

目标:一个帐户只能使用两个不同的设备登录。

我一直在努力解决这个问题。

我使用过用户状态(https://github.com/mizzao/meteor-user-status)插件,但它不符合所有功能。此插件可以限制同一帐户的登录次数,但当某人在其浏览器中打开新标签时,它会被视为“自动登录”。

那么如何限制同时登录Meteor帐户的设备数量,而无需在同一台设备上重复计算额外的标签或窗口?

3 个答案:

答案 0 :(得分:1)

我已经根据用户状态包以自己的方式完成了这些工作。

enter image description here

我将第一个session_id添加为浏览器标识符(tab_id)并将其设置为cookie。名为 tab_ids 的状态下将有一个新数组,浏览器ID将添加到tab_ids集。

然后我为浏览器ID生成一个新的键集(tab_id例如:MjTdDH ...)并在浏览器id(tab_id)下设置session_id(connection_id)。

因此,每当用户创建新选项卡时,计数不会增加,只有当用户使用不同浏览器登录时,计数才会增加。

现在工作正常,但仍然存在问题。当用户登录到一个浏览器(例如:firefox),然后退出浏览器。然后当用户登录其他两个浏览器,如safari和chrome。实际上,当计数增加到2时,用户无法再登录到第三个浏览器,但是meteor的自动登录功能使您可以在打开之前登录的firefox时自动登录。 那么有人知道如何解决这个问题吗?

答案 1 :(得分:0)

您希望使用登录挂钩并拒绝恢复登录或其他登录,并挂钩到用户状态。请参阅https://github.com/HarvardEconCS/turkserver-meteor/blob/master/lib/accounts_mturk.coffee#L6 - 特别是注释掉的部分。 API位于http://docs.meteor.com/#accounts_validateloginattempt

免责声明:我编写了该软件包以及用户状态。

如果我不能正确理解这个问题,请重新提问。

答案 2 :(得分:0)

您可以从列表中取出最旧的简历标记,即第一个元素。

如果您希望用户仅从一个设备/浏览器登录

Accounts.onLogin((loginAttempt) => {
  Meteor.users.update({
    _id: loginAttempt.user._id, 
    'services.resume.loginTokens.1': { $exists: true } 
  }, {
    $pop: { 'services.resume.loginTokens': -1 } 
  });
});

两个设备只需使用services.resume.loginTokens.2