如何实现独占/仅限邀请用户注册?

时间:2018-04-01 03:42:39

标签: node.js express authentication passport.js

我正在创建一个使用用户身份验证的网站,我计划使用邀请或其他方法限制访问。

该站点基于Node,Express和MongoDB构建。我计划使用Passport JS,主要是因为它是我学到的唯一方法(这是我的第一个个人项目)。

我唯一的想法是注册页面上的“密码”。因此,只有我告诉代码的人才能注册。我有一种感觉,有更优雅或安全的方法来处理这个问题,并且会喜欢任何建议!

3 个答案:

答案 0 :(得分:2)

我认为您的想法原则上是正确的 - 它与用于游戏的注册/测试版密钥的方法相同。您为要注册的每个用户生成一个唯一的“密钥”。他们使用该密钥注册,并在数据库中标记为“已使用”;这可以防止其他用户发现该密钥并重新使用它。

您也可以使用基本相同的方式使用电子邮件地址。用于注册的电子邮件地址必须位于“邀请列表”中。当您通过发送“点击此链接以确认”电子邮件“确认”地址时,您必须生成另一个真实性密钥。

因此,在使用受邀电子邮件注册后,您可以生成key,如下所示:

require('crypto').randomBytes(48, function(err, buffer) { var key = buffer.toString('base64'); // then save the key with the new user in the database });

然后发送一封包含key的确认链接的电子邮件,例如:

https://www.mywebsite.com/users/confirm_email/{key}

此链接会在您的服务器上调用“confirm_email”操作,查找指定的key,并启用与之关联的帐户。

您可能希望在每次创建密钥时添加到期日,以增加安全性。也许只有24小时确认电子邮件。

答案 1 :(得分:0)

如果有邀请函,您就不需要任何密码:

当有人邀请其他人时,您会将邀请的电子邮件存储在某处。您只需要在您的访客列表中检查新用户是否已经#34;当他试图注册时。

答案 2 :(得分:0)

我可以想到的一种解决方案就是使用发件人令牌(使用带有到期时间和发件人令牌签名的token)来生成jsonwebtoken。现在,当被邀请的用户将收到链接时,说:http://localhost:5000/invite/${token}并单击链接,然后将向服务器发送一个GET请求,以便捕获该请求,然后在该请求中后端对该令牌进行解码,并检查your user database是否存在该用户,即sender并且令牌未过期,则它是有效邀请,因此现在直接将邀请接收方重定向到注册页面,否则发送邀请无效的消息

希望获得帮助。 让我知道你的看法。