【发布时间】:2015-05-07 11:07:04
【问题描述】:
对于我的 Meteor 应用程序,我希望有以下注册流程:
- 用户注册用户名、电子邮件和密码。 (他还不能登录。)
- 已发送确认电子邮件 [
Accounts.sendEnrollmentEmail] - 用户确认电子邮件 [
Accounts.onEnrollmentLink] - 用户已创建。 [
Accounts.createUser] (他可以登录了。)
为了实现这一点,我觉得我必须将 纯文本 密码存储在临时用户表中(第 1 步),以便稍后创建实际用户(第 3 步) .显然这是一个可怕的想法。
我当然只能从第 3 步开始询问密码并立即创建用户 - 但这不是我想要实现的行为。
那么:是否有适当的方法来安全地存储密码以便以后将其传递给用户创建?或者有没有办法创建一个不可登录的用户?
【问题讨论】:
-
是否有中间立场——比如允许用户登录,但如果他/她没有任何经过验证的电子邮件,则自动将他们重定向到“您需要验证您的电子邮件”路线?
-
您可以像创建用户时一样存储散列密码并将其存储在临时用户表中。
-
同意大卫,常见的模式是允许登录但禁用操作。再说一次,加盐和散列是每个 Web 开发人员都应该解决的一个很好的练习!
-
顺便说一句,您是否不希望用户在确认电子邮件之前出现在用户集合中?您可以让流星帐户照常工作,只需设置一个 cron 作业即可在 X 小时/天后删除用户而无需确认。
-
我明白你的意思。您可以散列密码(帐户密码使用 sha256)将其存储在临时表中,并在常规用户创建期间绕过服务器散列密码,如果您给它一个像
{algorithm: "sha-256", digest: "yourhash"}这样的对象,请检查 getPasswordString 和 createUser功能。