2009-06-08 11 views
2

Anstatt Benutzer zu zwingen, sich an einen Benutzernamen zu erinnern, möchte ich lieber ihre E-Mail-Adresse eingeben und das Passwort zurücksetzen und an sie senden lassen.PasswordRecovery mit E-Mail anstelle von UserName

Ich verwende ASP.Net PasswordRecovery-Steuerelement unter dem Mitgliedschaftsanbieter.

Momentan funktioniert das System gut, es setzt das Passwort zurück und sendet es an den Benutzer. Ich finde jedoch, dass viele Benutzer ihren Benutzernamen vergessen. Natürlich schalte ich den Benutzernamen in die E-Mail ein.

Idealerweise würde ich mit Benutzernamen vollständig verzichtet werden kann, aber leider schon Ich habe Benutzer mit Benutzernamen, die keine Adressen eine E-Mail sind.

Also, wie kann ich einfach meine Passwordkontrolle ändern für die Benutzer-E-Mail-Adresse zu stellen und das Zurücksetzen des Passworts, und Benutzername an diese Adresse schicken?

Vielen Dank. So

Antwort

1

wenn der Benutzer nicht ihren Benutzernamen nicht kennt, bieten sie ihre E-Mail und Sie FindUsersByEmail oder GetUserNameByEmail.

Wenn sie nicht ihre E-Mail-Adresse kennen, bieten sie ihren Benutzernamen und Sie FindUsersByName.

Wie Cade darauf hingewiesen hat - Ihre Frage ist nicht wirklich offensichtlich von Ihrem Beitrag.

+0

Ich versuchte UserNameLabelText = Hinzufügen von "E-Mail:" OnVerifyingUser = "PasswordRecovery1_VerifyingUser" der asp: Password und protected void PasswordRecovery1_VerifyingUser (object sender, MailMessageEventArgs e) { PasswordRecovery1.UserName = System.Web.Security. Membership.GetUserNameByEmail (PasswordRecovery1.UserName); } in der zugehörigen .cs-Datei, aber das Steuerelement failes zu kompilieren mit einem Fehler CS0123: Keine Überladung für 'PasswordRecovery1_VerifyingUser' entspricht Delegat 'System.Web.UI.WebControls.LoginCancelEventHandler', die mich verliert. – Degan

+1

PasswordRecovery1_VerifyingUser sollte einen zweiten Parameter des Typs System.Web.UI.WebControls.LoginCancelEventArgs haben: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.passwordrecovery.onverifyinguser.aspx nicht von Geben Sie MailMessageEventArgs ein. Sie sollten auch überprüfen, ob der Benutzername tatsächlich mit einem E-Mail-Adressmuster übereinstimmt. Andernfalls gibt GetUsernameByEmail null zurück und löscht das Feld UserName. –

+0

Danke, Zhaph, ich hatte wirklich keine Ahnung, dass ich den falschen Parametertyp gesendet habe. Es funktioniert jetzt. – Degan

2

Sie können einen Handler des PasswordRecovery.VerifyingUser Ereignis implementieren, damit der Benutzer entweder einen Benutzernamen oder ein Passwort zur Verfügung zu stellen.

protected void PasswordRecovery1_VerifyingUser(object sender, LoginCancelEventArgs e) 
{ 
    PasswordRecovery passRecovery = (PasswordRecovery)sender; 

    if (Membership.FindUsersByName(passRecovery.UserName).Count == 0) 
    { 
     // There is no matching user name. Check to see if a known email address 
     // was entered. If so use the user name corresponding to the email address. 
     string user = Membership.GetUserNameByEmail(passRecovery.UserName); 
     if (user != null) 
      passRecovery.UserName = user; 
    } 
}