如果我不知道旧密码,如何更改密码?

How, I can change password, if I do not know the old password?

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

      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。

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

第一个:

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