Frage ASP.NET Identity Reset-Passwort


Wie kann ich das Passwort eines Benutzers im neuen ASP.NET Identity-System abrufen? Oder wie kann ich zurücksetzen, ohne den aktuellen zu kennen (Benutzer Passwort vergessen)?


74
2017-10-22 17:06


Ursprung


Antworten:


In der aktuellen Version

Angenommen, Sie haben die Überprüfung der Anforderung zum Zurücksetzen des vergessenen Kennworts durchgeführt, verwenden Sie den folgenden Code als Beispielcode Schritte.

ApplicationDbContext =new ApplicationDbContext()
String userId = "<YourLogicAssignsRequestedUserId>";
String newPassword = "<PasswordAsTypedByUser>";
ApplicationUser cUser = UserManager.FindById(userId);
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();            
store.SetPasswordHashAsync(cUser, hashedNewPassword);

In AspNet Nightly Build

Das Framework wird aktualisiert, um mit Token für die Verarbeitung von Anfragen wie ForgetPassword zu arbeiten. Sobald die Veröffentlichung erfolgt ist, wird eine einfache Code-Anleitung erwartet.

Aktualisieren:

Dieses Update dient nur dazu, mehr klare Schritte zu bieten.

ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
String userId = User.Identity.GetUserId();//"<YourLogicAssignsRequestedUserId>";
String newPassword = "test@123"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);                    
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);

86
2017-10-22 19:29



Oder wie kann ich zurücksetzen, ohne den aktuellen zu kennen (Benutzer Passwort vergessen)?

Wenn Sie ein Passwort mit dem UserManager ändern möchten, aber das aktuelle Passwort des Benutzers nicht angeben möchten, können Sie ein Token zum Zurücksetzen des Kennworts generieren und es stattdessen sofort verwenden.

string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);

100
2018-03-24 15:23



Veraltet

Dies war die ursprüngliche Antwort. Es funktioniert, hat aber ein Problem. Was wäre wenn AddPassword scheitert? Der Benutzer wird ohne ein Passwort verlassen.

Die ursprüngliche Antwort: Wir können drei Codezeilen verwenden:

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);

Siehe auch: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

Jetzt empfohlen

Es ist wahrscheinlich besser, die Antwort darauf zu verwenden EdwardBrey schlug vor und dann Daniel Wright später ausgearbeitet mit einem Codebeispiel.


66
2018-03-18 20:53



Auf Ihrem UserManager, erster Aufruf GeneratePasswordResetTokenAsync. Sobald der Benutzer seine Identität verifiziert hat (z. B. indem er das Token in einer E-Mail erhält), übergeben Sie das Token an ResetPasswordAsync.


26
2018-04-15 20:49



Methode erstellen in UserManager<TUser, TKey>

public Task<IdentityResult> ChangePassword(int userId, string newPassword)
{
     var user = Users.FirstOrDefault(u => u.Id == userId);
     if (user == null)
          return new Task<IdentityResult>(() => IdentityResult.Failed());

     var store = Store as IUserPasswordStore<User, int>;
     return base.UpdatePassword(store, user, newPassword);
}

2
2017-12-02 15:18



string message = null;
//reset the password
var result = await IdentityManager.Passwords.ResetPasswordAsync(model.Token, model.Password);
if (result.Success)
{
    message = "The password has been reset.";
    return RedirectToAction("PasswordResetCompleted", new { message = message });
}
else
{
    AddErrors(result);
}

Dieser Codeschnipsel wurde aus dem AspNetIdentitySample-Projekt entfernt verfügbar auf GitHub


1
2017-10-22 17:48



Im Falle eines Zurücksetzens des Passworts wird empfohlen, das Passwort zurückzusetzen, indem Sie das Token zum Zurücksetzen des Passworts an die E-Mail des registrierten Benutzers senden und den Benutzer auffordern, ein neues Passwort einzugeben. Wenn Sie eine einfach zu verwendende .NET-Bibliothek über das Identitätsframework mit Standardkonfigurationseinstellungen erstellt haben. Sie finden Details unter Blog-Verbindung und Quellcode bei Github.


1
2017-08-05 19:11