【问题标题】:Database table for password recovery via email link通过电子邮件链接恢复密码的数据库表
【发布时间】:2014-06-25 20:45:59
【问题描述】:

我正在开发一个身份验证系统。 它有两个表

UserRegistration // 用于临时存储用户信息,直到用户验证邮箱

ID 
-UserRegistrationID
-FirstName
-LastName
-emailId
-password
-dateTime
-activationCode

AuthenticatedUsers//系统用户

-AuthUserID
-FirstName
-LastName
-emailId
-password
-dateTime

不,我必须提供通过电子邮件恢复密码的选项。我必须向用户发送恢复链接。

恢复链接代码在数据库中的存储位置?我应该为恢复代码创建一个单独的表: 恢复代码

-recoveryID //PK
-AuthUserID //FK
-recoveryCode
-dateTime     //as the link is valid only for 24 hours.

请提供您的反馈和建议。 谢谢!

【问题讨论】:

  • 简单的答案是“是”
  • 例如在 AuthenticatedUsers 表中使用 recoveryCode。通常不需要单独的表,如 UserRegistration 和 Authenticated users。仅使用用户。
  • 这个 Q 要求有自以为是的答案,因此它有机会被关闭。尽管如此......另一个选择是在查询路径中编码所有必要的东西并且不使用任何额外的表。当然,路径应该包含一些控制和以防止意外访问其他帐户,并且所有相关部分都应该被混淆。

标签: sql database login password-recovery


【解决方案1】:

在我的应用程序中,recoverycode 存储在其他用户信息中。

它只是一个只有效一次的令牌。如果用户单击恢复链接,他可以更改他的密码。每次更改密码时都会重置恢复令牌(经过身份验证的用户仍需要当前密码)。

最重要,恢复令牌应该像密码一样存储,也就是说,使用强哈希方法。创建的令牌(我使用 UUID4)被发送给用户(作为链接的一部分)并存储在数据库中。

为此,该链接需要令牌和用户独有的东西(我发现用户 ID 完全没问题)。一个用户不需要多个恢复链接。因此,只需将您拥有的一个令牌与其他用户数据一起保存即可。

来源和进一步的想法:palco.readthedocs.org

【讨论】:

  • 您如何看待包含以下列的新表(我们称之为令牌):id、token、userId、createdAt。
猜你喜欢
  • 2010-11-05
  • 2011-10-07
  • 1970-01-01
  • 2017-11-12
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 2011-02-14
相关资源
最近更新 更多