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.
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 wurde aktualisiert, um mit Token für die Bearbeitung von Anforderungen wie ForgetPassword zusammenzuarbeiten. Nach der Veröffentlichung wird eine einfache Code-Anleitung erwartet.
Aktualisieren:
Dieses Update dient nur dazu, klarere Schritte bereitzustellen.
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);
Wenn Sie ein Kennwort mit dem UserManager ändern möchten, aber nicht das aktuelle Kennwort des Benutzers angeben möchten, können Sie ein Token zum Zurücksetzen des Kennworts generieren und es stattdessen sofort verwenden.
quelle
SecurityStamp
für Ihren Benutzer nicht null ist. Dies kann bei Benutzern auftreten, die aus anderen Datenbanken migriert wurden, oder bei Benutzern, die nicht mithilfe einerUserManager.CreateAsync()
Methode erstellt wurden.Veraltet
Dies war die ursprüngliche Antwort. Es funktioniert, hat aber ein Problem. Was ist, wenn es
AddPassword
fehlschlägt? Der Benutzer hat kein Passwort.Die ursprüngliche Antwort: Wir können drei Codezeilen verwenden:
Siehe auch: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx
Jetzt empfohlen
Es ist wahrscheinlich besser, die Antwort zu verwenden, die EdwardBrey vorgeschlagen und DanielWright später mit einem Codebeispiel ausgearbeitet hat .
quelle
UserManager
Rufen Sie bei Ihrem ersten Aufruf GeneratePasswordResetTokenAsync auf . Wenn der Benutzer seine Identität überprüft hat (z. B. durch Empfangen des Tokens in einer E-Mail), übergeben Sie das Token an ResetPasswordAsync .quelle
ResetPasswordAsync
einer Benutzer-ID besteht darin, dass der Identitätsanbieter nur Benutzer-IDs indizieren muss, nicht auch Token. Dadurch kann es besser skaliert werden, wenn viele Benutzer vorhanden sind.Dieser Codeausschnitt stammt aus dem auf github verfügbaren AspNetIdentitySample-Projekt
quelle
Methode erstellen in
UserManager<TUser, TKey>
quelle
Im Falle eines Zurücksetzens des Passworts wird empfohlen, es durch Senden eines Token zum Zurücksetzen des Passworts an die E-Mail-Adresse eines registrierten Benutzers zurückzusetzen und den Benutzer aufzufordern, ein neues Passwort anzugeben. Wenn Sie eine einfach zu verwendende .NET-Bibliothek über das Identity Framework mit Standardkonfigurationseinstellungen erstellt haben. Details finden Sie unter Blog-Link und Quellcode bei github.
quelle
Ich denke, Microsoft-Handbuch für ASP.NET Identity ist ein guter Anfang.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
Hinweis:
Wenn Sie AccountController nicht verwenden und Ihr Kennwort nicht zurücksetzen möchten, verwenden Sie
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
. Wenn Sie nicht denselben OwinContext haben, müssen Sie einen neuen erstellen,DataProtectorTokenProvider
wie erOwinContext
verwendet wird. Standardmäßig anschauenApp_Start -> IdentityConfig.cs
. Sollte ungefähr so aussehennew DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
.Könnte so erstellt werden:
Ohne Owin:
Mit Owin:
Das
DpapiDataProtectionProvider
undDataProtectorTokenProvider
muss mit demselben Namen erstellt werden, damit ein Zurücksetzen des Kennworts funktioniert. Die Verwendung von Owin zum Erstellen des Token zum Zurücksetzen des Kennworts und zum Erstellen eines neuen TokensDpapiDataProtectionProvider
mit einem anderen Namen funktioniert nicht.Code, den ich für die ASP.NET-Identität verwende:
Web.Config:
AccountController.cs:
quelle
Ich habe ein wenig nachgeforscht und die Lösung, die für mich funktioniert, war eine Mischung aus einigen Lösungen, die in diesem Beitrag gegründet wurden.
Ich kompiliere diese Lösung im Grunde und poste, was für mich funktioniert. In meinem Fall möchte ich kein Token aus dem .net-Kern verwenden.
quelle
Beste Methode zum Zurücksetzen des Kennworts in Asp.Net Core Identity für die Web-API.
Hinweis * : Fehler () und Ergebnis () werden für den internen Gebrauch erstellt. Sie können zurückkehren, was Sie wollen.
quelle