【问题标题】:How, I can change password, if I do not know the old password?如果我不知道旧密码,如何更改密码?
【发布时间】:2015-08-08 01:25:50
【问题描述】:

我需要创建方法,如果我不知道旧密码,可以更改数据库中的密码。例如,我有下一个代码:

      public IHttpActionResult ChangePassword(ChangePasswordBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var result = UserManager.ChangePassword(User.Identity.GetUserId(), model.OldPassword,
            model.NewPassword);
        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        return Ok();
    }

在此代码中需要“model.OldPassword”但用户不知道旧密码。 我只有密码和当前用户 ID。

【问题讨论】:

  • 我可以使用“PasswordHasher.HashPassword”作为我的示例吗?
  • 所以您希望不知道密码的人能够将密码更改为他们可以使用的新密码,对吗?你看不出有什么问题吗?无论如何,这样做应该是一个管理员功能 - 知道管理员密码的人可以更改另一个用户的密码。
  • @MatthewWatson 我知道你要去哪里,但是如果 OP 会通过邮件验证或类似的方式来做呢?
  • @maam27 没关系,但它是一个服务器端功能(因此发送电子邮件并通过允许他们输入新密码来响应用户的回复不需要密码)。
  • 当然可以。只有管​​理员可以更改密码。

标签: c# .net asp.net-web-api owin


【解决方案1】:

嗯,我不知道这是否是最优的,但这很容易。

第一:

var code = await UserManager.GeneratePasswordResetTokenAsync(userId);

然后

var result = await UserManager.ResetPasswordAsync(userId, code, someNewPassword);

您甚至可以将其封装在扩展方法中

public static class UserManagerEx
{
    public static async Task<IdentityResult> ForceChangePassword<T, TUserId>(
        this UserManager<T, TUserId> userManager,
        TUserId userId,
        string newPassword)
            where T : class, IUser<TUserId>
            where TUserId : IEquatable<TUserId>
    {
        var code = await userManager.GeneratePasswordResetTokenAsync(userId);
        var result = await userManager.ResetPasswordAsync(userId, code, newPassword);
        return result;
    }
}

然后调用它:

var result = UserManager.ForceChangePassword(userId, newPassword);

【讨论】:

  • 谢谢,您的回答对我有帮助。
猜你喜欢
  • 2011-06-28
  • 2023-03-24
  • 1970-01-01
  • 2014-12-10
  • 2017-04-16
  • 2011-09-10
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多