Ich brauche die Fähigkeit, das Passwort für den Benutzer von admin ändern. Also, Admin sollte kein aktuelles Passwort des Benutzers eingeben, er sollte die Möglichkeit haben, ein neues Passwort zu setzen. Ich schaue auf ChangePasswordAsync-Methode, aber diese Methode erfordert, altes Passwort einzugeben. Daher ist diese Methode für diese Aufgabe nicht geeignet. Deshalb habe ich es durch die folgende Art und Weise hergestellt:ASP.NET Identität Passwort ändern
[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);
}
es funktioniert, aber theoretisch können wir Fehler auf AddPasswordAsync Methode erhalten. Das alte Passwort wird also entfernt, aber das neue Passwort wird nicht gesetzt. Es ist nicht gut. Irgendeine Möglichkeit, es in "einer Transaktion" zu tun? PS. Ich sah ResetPasswordAsync-Methode mit Reset-Token, scheint, es ist sicherer (weil nicht instabil Situation mit Benutzer sein kann), aber in jedem Fall, es durch 2 Aktionen.
Der Kern dieser Frage ist es in einer Transaktion zu tun. Wären Sie zufrieden, es in zwei Transaktionen zu tun und weiter zu versuchen, bis der zweite erfolgreich ist? Wenn nicht, müssen Sie möglicherweise Ihre eigene Implementierung schreiben, um ein Passwort zu ändern. –