PasswordRecovery使用电子邮件而不是UserName

时间:2009-06-08 19:39:12

标签: asp.net email asp.net-membership passwords

我宁愿让用户输入他们的电子邮件地址并重置密码并发送给他们,而不是强迫用户记住用户名。

我在会员提供商下使用ASP .Net PasswordRecovery控件。

现在系统工作正常,它会重置密码并发送给用户。但是,我发现许多用户忘记了他们的UserName。显然,我在电子邮件中包含了UserName。

理想情况下,我会完全免除用户名,但遗憾的是我已经拥有不是电子邮件地址的UserNames用户。

那么,如何轻松更改我的PasswordRecovery控件以询问用户的电子邮件地址并将重置密码和UserName发送到该地址?

我尝试添加

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 个答案:

答案 0 :(得分:2)

您可以实现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 :(得分:1)

因此,如果用户不知道他们的用户名,他们会提供他们的电子邮件,您使用FindUsersByEmail或GetUsernameByEmail。

如果他们不知道自己的电子邮件地址,则会提供用户名,并使用FindUsersByName。

正如凯德指出的那样 - 你的问题在你的帖子中并不是很明显。