Мне нужно изменить пароль для пользователя по администратора. Таким образом, администратор не должен вводить текущий пароль пользователя, он должен иметь возможность устанавливать новый пароль. Я смотрю на метод 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. Таким образом, старый пароль будет удален, но новый не будет установлен. Это не хорошо. Любой способ сделать это в "одной транзакции"? PS. Я видел метод ResetPasswordAsync с токеном reset, кажется, он более безопасен (потому что не может быть нестабильной ситуацией с пользователем), но в любом случае он выполняет 2 действия.