Ho bisogno di modificare la password per l'utente da admin. Quindi, admin non dovrebbe inserire una password attuale dell'utente, dovrebbe avere la possibilità di impostare una nuova password. Guardo il metodo ChangePasswordAsync, ma questo metodo richiede l'inserimento della vecchia password. Quindi, questo metodo non è appropriato per questa attività. Perciò l'ho fatto dal modo seguente:Password cambio identità ASP.NET
[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);
}
funziona, ma teoricamente possiamo ricevere errore sul metodo AddPasswordAsync. Quindi, la vecchia password verrà rimossa ma la nuova non è impostata. Non è buono. Un modo per farlo in "una sola transazione"? PS. Ho visto il metodo ResetPasswordAsync con il token di reset, sembra, è più sicuro (perché non può essere una situazione instabile con l'utente), ma in ogni caso lo fa con 2 azioni.
Il punto cruciale di questa domanda è farlo in un'unica transazione. Saresti soddisfatto di farlo in due transazioni e di continuare a provare fino a quando il secondo riesce? In caso contrario, potrebbe essere necessario scrivere la propria implementazione della modifica di una password. –