怎么,我可以更改密码,如果我不知道旧密码?

时间:2015-04-07 12:49:04

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

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

      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。

1 个答案:

答案 0 :(得分:6)

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

首先:

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);