Asp.net 使用电子邮件而不是用户名恢复密码

Asp.net 使用电子邮件而不是用户名恢复密码,asp.net,email,asp.net-membership,passwords,Asp.net,Email,Asp.net Membership,Passwords,与其强迫用户记住用户名,我宁愿让他们输入他们的电子邮件地址,重置密码并发送给他们 我正在成员资格提供程序下使用ASP.Net PasswordRecovery控件 现在系统工作正常,它重置密码并发送给用户。然而,我发现许多用户忘记了他们的用户名。显然,我在给他们的电子邮件中包含了用户名 理想情况下,我会完全不用用户名,但不幸的是,我已经有了用户名不是电子邮件地址的用户 那么,如何轻松地更改PasswordRecovery控件以请求用户的电子邮件地址并将重置密码和用户名发送到该地址 我试着加上 U

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

我正在成员资格提供程序下使用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\u VerifyingUser”匹配没有重载 代表“System.Web.UI.WebControls.LoginCancelEventHandler”


我不理解,所以如果用户不知道他们的用户名,他们会提供他们的电子邮件,你可以使用FindUsersByEmail或GetUsernameByEmail

如果他们不知道他们的电子邮件地址,他们提供他们的用户名,你使用FindUserByName


正如Cade所指出的,您的问题在帖子中并不明显。

您可以实现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;
    }
}

我尝试将UserNameLabelText=“Email:”OnVerifyingUser=“PasswordRecovery1\u VerifyingUser”添加到asp:PasswordRecovery中,并将受保护的无效PasswordRecovery1\u VerifyingUser(对象发送者,MailMessageEventArgs e){PasswordRecovery1.UserName=System.Web.Security.Membership.GetUserNameByEmail(PasswordRecovery1.UserName)在关联的.cs文件中,但控件未能编译,错误为CS0123:“PasswordRecovery1_VerifyingUser”的重载与委托“System.Web.UI.WebControl.LoginCancelEventHandler”的重载不匹配,这会丢失我。PasswordRecovery1_VerifyingUser应具有第二个System.Web.UI.WebControl.LoginCancelEventArgs类型的参数:不是MailMessageEventArgs。您还需要检查用户名是否确实与电子邮件地址模式匹配,否则GetUsernameByEmail将返回null并清空用户名字段。谢谢您,Zhaph,我真的没有想到我发送了错误的参数类型。它现在正在工作。