【问题标题】:Reset/Forgot password functionality in MVC 2 with default asp.net membership provider使用默认 asp.net 会员提供程序在 MVC 2 中重置/忘记密码功能
【发布时间】:2012-02-26 09:38:59
【问题描述】:

我目前使用默认会员提供程序运行 MVC2 网站。一切都很好,但现在我发现需要忘记密码功能。

经过一番谷歌搜索后,我能找到的唯一好的实现是基于使用机器密钥来确保安全性或问答功能。

这些实现的问题是我已经拥有相当大的用户群。我现在无法将密码换成机器密钥,因为我已经在使用哈希系统了。

passwordFormat="Hashed"

我也不想强迫现有用户在事后添加问题和答案。问答也不太理想,好像他们也忘记了这些信息,他们运气不好。

我理想的实现是用户点击忘记密码,输入他们的用户名或电子邮件(最好是电子邮件)。然后,他们将收到一封电子邮件,其中包含他们当前的密码(我相信这对于我使用的哈希方法是不可能的)、一个他们被告知要更改的新随机密码,或者一个带有令牌的链接,可以让他们在点击后重置密码它。

有没有什么好的指南可以快速做到这一点?我能找到的一切要么与使用机器密钥方法有关,要么与问答有关。我很惊讶我找不到任何东西,因为这是非常常见的网络功能。我很惊讶它甚至不是 MVC 附带的默认会员提供程序的一部分。

我意识到令牌是最安全的,其次是随机密码,但现在我对这三种情况都持开放态度。

如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    如果用户的电子邮件地址已经以某种方式链接到他/她的帐户,则向用户发送电子邮件以更改其密码是一个很好的解决方案。理想的情况是您的用户名必须是电子邮件地址。这是我的做法

    1. 在管理您帐户的控制器上创建 ForgotPassword 操作。 HttpGet 版本只提供“请输入电子邮件地址”视图,而 HttpPost 版本验证电子邮件地址,确保它属于用户。
    2. 如果电子邮件地址有效,则向用户发送电子邮件。在该电子邮件中,您应该有一个格式为“{Your Account Controller}ChangePassword?id={请求更改密码的用户的用户名,我建议您为安全起见}”的链接
    3. 您的 HttpGet ChangePassword 操作将采用 id,将其映射到系统中的用户。然后提供相应的视图供用户更改密码。
    4. 您的 HttpPost ChangePassword 操作将使用新密码更新用户的旧密码。

    使用这种方法,您不必通过电子邮件向他们发送密码,您实际上是在制作一个允许用户更改密码的功能。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 2011-03-09
      • 2013-11-16
      • 2011-10-13
      • 1970-01-01
      • 2011-10-19
      • 2017-08-23
      • 2013-05-13
      相关资源
      最近更新 更多