我需要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。
答案 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);