2016-03-24 12 views
1

Ich habe hier ein Szenario, wobei, wenn ein Benutzer ein Passwort zurücksetzen möchte, das System ein temporäres zufällig generiertes Passwort per E-Mail an den Benutzer senden muss. Ich habe versucht, das temporäre Passwort in einer neuen Spalte in der Datenbank zu speichern, aber ich bin mir nicht sicher, ob dieser Ansatz gut funktioniert. Einige Leute empfehlen token wie unten:C# ASP.NET Identität

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

Ich bin aber wirklich neu zu ASP.NET und ich bin nicht vertraut mit token. Wie kann ich das temporäre token mit dem token in der Datenbank vergleichen?

Ein andere Methode, die ich dies zu implementieren gefunden ist eine Membership.GeneratePassword Funktion zu haben, die eine zufällige Zeichenfolge generiert:

model.temppwd = Membership.GeneratePassword(10, 1); 

Kann mir jemand eine ideale Möglichkeit bietet diese Funktionalität mit einigem Beispiel zu implementieren? Vielen Dank!

+2

http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity –

+0

Tatsächlich enthält die ASP.NET-Webanwendung-Projektvorlage ein vollständige Implementierung –

+1

@Joe Sie müssen nichts speichern. Das Token ist * kein * temporäres Passwort und * Sie * muss es nirgendwo speichern. Dies wird von ASP.NET Identity genauso gehandhabt wie der Benutzer-/Passwortspeicher. In der ASP.NET MVC-Projektvorlage sehen Sie, dass AccountController über eine ResetPassword-Methode verfügt, die 'var result = await verwendet. UserManager.ResetPasswordAsync (user.Id, model.Code, model.Password)' wo 'model.Code' steht Token eingegeben vom Benutzer entweder direkt oder über einen Link –

Antwort

0

In unserem Projekt haben wir

Guid.NewGuid(); und schickte die E-Mail den Link zum Passwort Aktion wiederherzustellen, die (MVC) als Query-String: https://yoursite.com/account/reset/?code=your_guid_code

Beispiel:

ResetPassword resetPassword = new resetPassword(); resetPassword.Code = Guid.NewGuid(); string strLink = string.Format("{0}", actionUrl + "?code="+ resetPassword.Code);

Und jetzt können Sie die strLink verwenden, um mit Ihrer E-Mail zu senden. Sie müssen Guid in einer Datenbanktabelle zusammen mit der Benutzer-ID speichern, damit Sie das Zurücksetzen implementieren können. Wenn der Benutzer auf den Link in Ihrer E-Mail klickt, wird er in einem Formular/einer Ansicht angezeigt, das nach einem neuen Passwort fragt. Sie sollten auch eine zusätzliche Spalte zu dieser Tabelle hinzufügen, um ein Ablaufdatum für diesen Code festzulegen. Wenn der Benutzer auf den Link in der E-Mail klickt und der Code abgelaufen ist, müssen Sie den Benutzer informieren und eine weitere E-Mail mit einem anderen Code senden.

+0

Danke für die Antwort, gibt es eine Möglichkeit, ich kann es implementieren, indem Sie dem Benutzer ein zufälliges Passwort für den Benutzer, um sich einzuloggen und ihr Passwort zu ändern? – Joe

+0

Ich denke, es fügt einen zusätzlichen Schritt hinzu. Sie könnten ein zufälliges Passwort vergeben, aber es ist nicht sehr nützlich, da es sowieso geändert werden muss. Stattdessen können Sie Ihrer Klasse/Ihrem Modell eine boolesche Eigenschaft wie "MustChangePasswordOnLogin" hinzufügen und sie auf "true" setzen, wenn die App die E-Mail sendet. Wenn der Benutzer den Link in der E-Mail verfolgt, überprüfen Sie die Eigenschaft. Wenn es falsch ist, heißt das, dass er es versehentlich erneut angeklickt hat, also laden Sie eine Standardansicht. Nachdem der Benutzer sein Kennwort geändert hat, legen Sie die Eigenschaft auf "false" fest und Sie sind fertig. Sie können dieses Schema auch beim Erstellen neuer Konten verwenden. –

Verwandte Themen