目标:一个帐户只能使用两个不同的设备登录。
我一直在努力解决这个问题。
我使用过用户状态(https://github.com/mizzao/meteor-user-status)插件,但它不符合所有功能。此插件可以限制同一帐户的登录次数,但当某人在其浏览器中打开新标签时,它会被视为“自动登录”。
那么如何限制同时登录Meteor帐户的设备数量,而无需在同一台设备上重复计算额外的标签或窗口?
答案 0 :(得分:1)
我已经根据用户状态包以自己的方式完成了这些工作。
我将第一个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