Восстановление пароля с использованием электронной почты вместо имени пользователя - PullRequest
2 голосов
/ 08 июня 2009

Вместо того, чтобы заставлять пользователей запоминать имя пользователя, я бы предпочел, чтобы они ввели свой адрес электронной почты, сбросили пароль и отправили ему.

Я использую ASP .Net PasswordRecovery под провайдером членства.

Прямо сейчас система работает нормально, сбрасывает пароль и отправляет пользователю. Однако я нахожу, что многие пользователи забывают свое имя пользователя. Очевидно, я включаю имя пользователя в электронное письмо им.

В идеале я бы полностью отказался от имен пользователей, но, к сожалению, у меня уже есть пользователи с именами пользователей, которые не являются адресами электронной почты.

Итак, как я могу легко изменить свой элемент управления PasswordRecovery, чтобы запрашивать адрес электронной почты пользователя и отправлять пароль сброса и имя пользователя на этот адрес?

Я пытался добавить

UserNameLabelText="Email:" OnVerifyingUser="PasswordRecovery1_VerifyingUser"

для asp: PasswordRecovery и

protected void PasswordRecovery1_VerifyingUser(
    object sender
  , MailMessageEventArgs e)
{ PasswordRecovery1.UserName = 
System.Web.Security.Membership.GetUserNameByEmai(PasswordRecovery1.UserName); } 

в связанном файле .cs, но элемент управления не компилируется с ошибкой

CS0123: нет перегрузки для совпадений PasswordRecovery1_VerifyingUser делегат 'System.Web.UI.WebControls.LoginCancelEventHandler'

чего я не понимаю

Ответы [ 2 ]

2 голосов
/ 26 августа 2014

Вы можете реализовать обработчик события PasswordRecovery.VerifyingUser, чтобы пользователь мог указать либо имя пользователя, либо пароль.

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;
    }
}
1 голос
/ 09 июня 2009

Поэтому, если пользователь не знает своего имени пользователя, он предоставляет свою электронную почту, и вы используете FindUsersByEmail или GetUsernameByEmail.

Если они не знают своего адреса электронной почты, они предоставляют свое имя пользователя, а вы используете FindUsersByName.

Как отметил Кейд, ваш вопрос не очень очевиден из вашего поста.

...