我正在创建一个使用用户身份验证的网站,我计划使用邀请或其他方法限制访问。
该站点基于Node,Express和MongoDB构建。我计划使用Passport JS,主要是因为它是我学到的唯一方法(这是我的第一个个人项目)。
我唯一的想法是注册页面上的“密码”。因此,只有我告诉代码的人才能注册。我有一种感觉,有更优雅或安全的方法来处理这个问题,并且会喜欢任何建议!
答案 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
并且令牌未过期,则它是有效邀请,因此现在直接将邀请接收方重定向到注册页面,否则发送邀请无效的消息
希望获得帮助。 让我知道你的看法。