我正在开发一个身份验证系统。 它有两个表
UserRegistration //用于暂时存储用户信息,直到用户验证电子邮件
ID
-UserRegistrationID
-FirstName
-LastName
-emailId
-password
-dateTime
-activationCode
AuthenticatedUsers //系统用户
-AuthUserID
-FirstName
-LastName
-emailId
-password
-dateTime
Noe我必须提供通过电子邮件恢复密码的选项。我必须向用户发送恢复链接。
将恢复链接代码存储在数据库中的位置?我应该为恢复代码创建一个单独的表: RecoveryCode
-recoveryID //PK
-AuthUserID //FK
-recoveryCode
-dateTime //as the link is valid only for 24 hours.
请提供您的反馈和建议。 谢谢!
答案 0 :(得分:1)
在我的应用程序中,recoverycode存储在其他用户信息中。
它只是一个只有一次有效的标记。如果用户单击恢复链接,则可以更改其密码。每次更改密码时都会重置恢复令牌(经过身份验证的用户仍需要当前密码)。
但最重要,恢复令牌应存储,如密码,这意味着,使用强哈希方法。创建的令牌(我使用UUID4)被发送给用户(作为链接的一部分)并存储在数据库中。
链接需要令牌和用户独有的东西(我发现用户ID完全没问题)。一个用户不需要多个恢复链接。因此,只需将您拥有的一个令牌与其他用户数据保存在一起。
来源和进一步的想法:palco.readthedocs.org。