Sonntag, Februar 10, 2008

ASP.NET Membership Provider custom password reset

Ich hatte schon länger Probleme mit dem Zurücksetzen des Passwortes in einer ASP.NET-Anwendung. Benutzt man nicht das Standardverhalten in dem man altes Passwort und neues Passwort abfragt, so hat man richtig Probleme ein Passwort-Reset durchzuführen. Diese Woche habe ich noch mal gegooglet und auch 2 Blog-Einträge mit einer ähnlichen Problemstellung gefunden. Der Blog-Eintrag „MembershipUser.ChangePasswort“ von Simon Steckermeier hat eine schöne Erläuterung der Problemstellung, einige kleine Macken hatten aber die Lösungen. Was passiert, wenn das Passwort nicht gesetzt werden kann, weil es die Regeln verletzt?

Also konnte ich die Lösung nicht so verwenden. Aber ein wenig ausprobieren und eine Lösung war gefunden. Allerdings kann man diese Lösung nicht mit Hashed-Passwords verwenden. Folgende Code-Zeilen sind meine Lösung:

string oldPW = Membership.Provider.GetPassword(this.txtUserName.Text, null);

string generatedPW = Membership.Provider.ResetPassword(this.txtUserName.Text, null);

try

{

Membership.GetUser(this.txtUserName.Text).ChangePassword(generatedPW, pw);

}

catch (ArgumentException ex)

{

Membership.GetUser(this.txtUserName.Text).ChangePassword(generatedPW, oldPW);

throw;

}

Unbedingt zu beachten ist, dass die web.config für die Provider-Einstellung korrekt eingestellt ist! Hier auch die Web.config-Attribute, die für den Provider entsprechend eingestellt sein müssen: enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" passwordFormat="Encrypted"

Im Anschluss ist alles super und die Password Veränderung kann man ansteuern, wie man möchte.

Keine Kommentare: