Kennwort zur Änderung der ASP.NET-Identität

Ich muss in der Lage sein, das Passwort für den Benutzer durch den Administrator zu ändern. Der Administrator sollte also kein aktuelles Passwort für den Benutzer eingeben, sondern die Möglichkeit haben, ein neues Passwort festzulegen. Ich schaue auf die ChangePasswordAsync-Methode, aber für diese Methode muss ein altes Kennwort eingegeben werden. Daher ist diese Methode für diese Aufgabe nicht geeignet. Deshalb habe ich es folgendermaßen gemacht:

    [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);
    }

it funktioniert, aber theoretisch können Fehler bei der AddPasswordAsync-Methode auftreten. Daher wird das alte Passwort entfernt, aber das neue nicht festgelegt. Es ist nicht gut. Wie kann man das in "einer Transaktion" machen? PS. Ich habe die ResetPasswordAsync-Methode mit einem Reset-Token gesehen. Sie ist anscheinend sicherer (da die Situation mit dem Benutzer nicht instabil sein kann), aber auf jeden Fall mit zwei Aktionen.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage