Some questions regarding implementing forgot password functionality in asp.net mvc
我想在ASP.NET MVC中实现一个忘记密码的功能,允许用户重置密码,并在这方面有一些问题:
假设在允许用户重置密码之前,我想验证一些额外的信息,比如他们的名字和姓氏。默认情况下,此信息不会存储在aspnet_regsql创建的表中。解决这些问题的建议方法是什么?我应该将此类信息存储在单独的表中,并使用表联接来验证,还是应该修改由aspnet regsql生成的表的架构(如何?)这样我就不必使用连接了?我需要编写自定义提供程序还是不需要?
我在一些地方读到过,例如在这篇文章中,不是通过电子邮件发送一个临时密码,而是通过电子邮件发送一个URL,点击后,该URL允许用户更改密码。这是怎么做到的?如何确保URL在1小时后过期?
我可以为你提出的问题写下几个答案。有太多的内容无法深入到实现细节中,但我将尝试在设计站点时记住一些要点。基本上,您可以(并且应该)与会员提供商合作,而不是围绕它工作。使用提供程序和ASP.NET MVC可以完成以下所有工作,但这有点困难。
- 避免直接访问成员表或执行成员存储过程。
- 它们的结构和用法可能在旧版本或新版本中有所不同。
- 提供程序已经建立,可以执行大多数任务。
- Linq其他框架方法和帮助完成其余工作。
- 对于名称等"额外"信息,请使用ASP.NET配置文件
- 用户电子邮件地址应该是唯一的。
- 用户应该创建自己的帐户。
- 管理员不应该直接创建新帐户。
- 密码和安全答案应该只有用户知道。
- 在激活帐户之前,应该发送一个生成的密钥(以URL的形式)来验证给定电子邮件地址的所有权。
- 实现成员资格提供程序已经支持的安全性问题和答案。
- 提供好的问题供选择。
- 不要强迫或信任用户临时想出一个好问题。
- 只有知道当前密码才能更改问题/答案。
- 忘记的密码
- 可以通过正确回答安全问题来重置。
- 如果安全答案也被忘记或帐户被锁定,可以通过管理操作重置。
- 重置密码应意味着:
- 生成的临时密码将发送到帐户上的电子邮件地址。临时手段:
- 一个标志(一个配置文件值)被设置为指示用户必须在下次登录后设置一个新密码。
- 密码在设定的时间后过期。
- 管理员可以重置密码,但不应该知道密码。
- 必须使用第二个提供程序定义完成(请参见ASP.NET用户忘记密码问题的答案)
- 如有必要,应同时解锁帐户。
- 密码或安全应答尝试失败过多后锁定帐户。
- 失败的尝试已在提供程序中计数和配置。
- 或者,在经过足够的时间后自动解锁帐户。
如果我再考虑的话,我会扩大这个范围。
我不知道这是否是推荐的方法,但是您可以像前面提到的那样创建一个单独的表,然后实现您自己的成员资格提供者。这样,在密码重置时,您可以实现所需的其他功能。
第二部分:我将生成一个令牌,在这里了解生成它的各种方法。您可以使用日期/时间存储令牌,将令牌作为URL的一部分通过电子邮件将链接发送给用户,然后一旦用户单击它,您就可以根据所用的时间量对其进行检查。