关于在asp.net mvc中实现忘记密码功能的一些问题

时间:2011-04-03 21:36:40

标签: .net asp.net asp.net-mvc-3 asp.net-membership forgot-password

我想在asp.net mvc中实现一个忘记密码功能,允许用户重置密码,并在这方面有一些问题:

  1. 让我们说在允许用户重置密码之前,我想验证一些额外的信息,例如他们的名字和姓氏。默认情况下,此信息不会存储在aspnet_regsql创建的表中。解决此类问题的建议方法是什么?我应该将这种信息存储在一个单独的表中,并使用表连接来验证OR是否应该修改aspnet_regsql生成的表的模式(如何?)以便我不必使用连接?我是否需要编写自定义提供程序,或者这不是必需的?

  2. 我在某些地方看过,例如在此post中,不是通过电子邮件发送临时密码,而是通过电子邮件发送一个URL,当点击该URL时,用户可以更改其密码。这是怎么做到的?如何确保网址在1小时后过期?

2 个答案:

答案 0 :(得分:4)

我可以详细地写下你提出的问题的几个答案。有太多的东西无法进入实现细节,但我会尝试达到设计网站时我一直记住的要点。基本上,您可以(并且应该)与会员提供商合作,而不是解决它。这有点工作,但可以使用提供程序和ASP.NET MVC完成以下所有操作。

  • 避免直接访问成员资格表或执行成员资格存储过程。
    1. 它们的结构和用法可能因旧版本或新版本而异。
    2. 已经建立了提供商以执行大多数任务。
    3. LINQ其他框架方法,并帮助完成其余的工作。
  • 对于名称等“额外”信息,请使用ASP.NET Profiles
  • 用户电子邮件地址应该是唯一的。
  • 用户应创建自己的帐户。
    1. 管理员不应直接创建新帐户。
    2. 只有用户才能知道密码和安全答案。
    3. 在帐户激活之前,应发送生成的密钥(以URL的形式)以验证给定电子邮件地址的所有权。
  • 实施会员提供商已经支持的安全问题和答案。
    1. Provide good questions from which to choose.
    2. 不要强迫或信任用户专心思考一个好问题。
    3. 只有知道当前密码才能更改问题/答案。
  • 忘记密码
    1. 可以通过正确回答安全问题来重置。
    2. 如果忘记安全答案或帐户被锁定,可以通过管理操作重置。
  • 重置密码应表示:
    1. 生成的临时密码将发送到该帐户的电子邮件地址。临时手段:
      • 设置一个标志(配置文件值),表示用户必须在下次登录后设置新密码。
      • 密码在一段时间后过期。
    2. 管理员可以重置密码,但永远不知道密码。
  • 在太多密码失败或安全回答尝试失败后锁定帐户。
    1. 已在提供程序中计算和配置失败的尝试。
    2. 可选择在经过足够时间后自动解锁帐户。

如果再想的话,我会扩展这个。

答案 1 :(得分:2)

我不知道这是否是推荐的方法,但您可以像您提到的那样创建一个单独的表,然后实现您自己的成员资格提供程序。这样,在密码重置时,您可以实现所需的其他功能。

第二部分: 我会生成一个令牌,阅读有关生成它的各种方法here。您可以使用日期/时间存储令牌,通过电子邮件将链接作为URL的一部分发送给用户的链接,然后您可以在用户点击它时将其与经过的时间量进行核对。 / p>