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

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

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

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

关于c# - 如果我不知道旧密码,如何更改密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29492034/

相关文章:

c# - 将 2 个单 float 合二为一

c# - 数据库中的最佳货币格式

c# - OrmLite.SqlServer 程序集出错

c# - 使用委托(delegate)执行任何方法并重试 1 次的通用方法

rest - Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost,仅在启动时出错

c# - 在 C# WebAPI 中处理 POST 表单数据

c# - 安卓 Xamarin C# : app runs in emulator but in actual device gets error: [INSTALL_PARSE_FAILED_BAD_MANIFEST]

c# - XML 序列化动态对象

c# - [JsonProperty] 在 C# 中有何用途?

asp.net-web-api - Web API 帮助页面 - 用户特定的响应类型