最佳答案
我需要能力改变用户的密码由管理员。因此,管理员不应该输入用户的当前密码,他应该有能力设置一个新的密码。我查看了 ChangePasswordAsync 方法,但是这个方法需要输入旧密码。所以,这个方法不适合这个任务。因此,我通过以下方式做到了这一点:
[HttpPost]
public async Task<ActionResult> ChangePassword(ViewModels.Admin.ChangePasswordViewModel model)
{
var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var result = await userManager.RemovePasswordAsync(model.UserId);
if (result.Succeeded)
{
result = await userManager.AddPasswordAsync(model.UserId, model.Password);
if (result.Succeeded)
{
return RedirectToAction("UserList");
}
else
{
ModelState.AddModelError("", result.Errors.FirstOrDefault());
}
}
else
{
ModelState.AddModelError("", result.Errors.FirstOrDefault());
}
return View(model);
}
它可以工作,但是理论上我们可以在 AddPasswordAsync 方法上接收错误。因此,将删除旧密码,但不设置 new。情况不妙。“一次交易”有什么办法吗? 附言。我看到了带有重置令牌的 ResetPasswordAsync 方法,似乎,它更安全(因为不能与用户不稳定的情况下) ,但在任何情况下,它做了2个动作。