【问题标题】:Reset ASP.NET Identity password fails重置 ASP.NET 身份密码失败
【发布时间】:2014-07-06 08:17:44
【问题描述】:

我正在使用 ASP.NET MVC5 Identity,并希望用户能够只需输入他们的电子邮件即可重置密码

只有固定数量的用户,并且他们已经设置好,包括一个电子邮件地址。如果用户访问该站点,他们可以单击“发送我的密码”链接,该链接应将有效密码发送到已存入的电子邮件中。

我想管理员接收当前密码没有简单的方法,所以我认为有必要重置密码然后创建邮件:

    [HttpPost]
    [AllowAnonymous]
    public JsonResult RecoverPassword(string usersEmail)
    {
        try
        {
            //"db" is my Context..
            var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
            var user = db.Users.Where(x => x.Email == usersEmail).First();
            Random rnd = new Random();
            int rndNumber = rnd.Next(100, 999);
            string Password = "MostSecurePasswordInTheWorld" + rndNumber + ".";
            um.RemovePassword(user.Id);
            um.AddPassword(user.Id, Password);
            db.SaveChanges();
            //send mail
            ...

这可能有一些弱点(知道某个用户的有效电子邮件的每个人都可能会重置它,密码在邮件中发送,自动生成的密码很弱等)。但最大的弱点是.. 密码无法重置

不过,我在调试中没有遇到任何错误,而且我有点无能为力。这里可能有什么问题?是我得到的“用户”

var user = db.Users.Where(x => x.Email == usersEmail).First();

不是这里需要的用户对象?

【问题讨论】:

  • 我强烈建议不要在没有任何验证的情况下更改密码(即,先链接到用户,一旦他们回复,允许他们更改密码..这不需要通过电子邮件发送密码,并且不会'不允许用户通过未经身份验证更改密码来互相恶作剧)

标签: asp.net asp.net-mvc asp.net-identity


【解决方案1】:

您需要在将密码保存到数据库之前对其进行哈希处理。使用 UserManager 类来访问密码保存功能,而不是尝试使用实体类直接操作它。

我还建议您向您的用户发送一个链接,让他们可以自己将密码重置为自己选择的密码。

通常我在我的系统中实现它的方式是在数据库中为所有发送的密码重置电子邮件保留一个表。该表包含一个日期时间时间戳字段以及一个确认号,它基本上是一个随机生成的 GUID,当然还有一个用于目标电子邮件地址的字段。然后,您可以将确认号和目标电子邮件地址放入电子邮件中包含的重置链接的查询字符串中。当用户单击该链接时,您的系统会检查它是否是有效的确认号电子邮件对以及是否已过期,然后继续提示您的用户输入新密码。

【讨论】:

  • 非常感谢 Juice 先生,对密码进行哈希处理是正确的提示!来自德国的问候
  • 很高兴能帮上忙,彼得!
【解决方案2】:

身份用户管理器功能中的一个常见问题是您无权访问它正在使用的 dbContext,因此您无法持久保存您想要的内容。

看看这个 SO 答案,它显示了如何使 usermanager dbContext 易于使用

Updating user data - ASP.NET Identity

【讨论】:

    【解决方案3】:

    这是一个使用名为SimpleSecurity 的开源项目的article on adding password reset using SimpleMembership。这提供了有关 ASP.NET MVC 中密码重置的一般设计的信息。使用 ASP.NET Identity 在 SimpleSecurity 项目中实现了相同的功能。您可以find the source code here 为控制器。看看 ResetPassword 方法。

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      相关资源
      最近更新 更多