【问题标题】:PasswordRecovery using email instead of UserNamePasswordRecovery 使用电子邮件而不是用户名
【发布时间】:2010-11-01 06:46:42
【问题描述】:

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

我正在使用会员提供程序下的 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'

我不明白

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我尝试将 UserNameLabelText="Email:" OnVerifyingUser="PasswordRecovery1_VerifyingUser" 添加到 asp:PasswordRecovery,并保护 void PasswordRecovery1_VerifyingUser(object sender, MailMessageEventArgs e) { PasswordRecovery1.UserName = System.Web.Security. Membership.GetUserNameByEmail(PasswordRecovery1.UserName); } 在关联的 .cs 文件中,但控件无法编译并出现错误 CS0123:“PasswordRecovery1_VerifyingUser”没有重载与委托“System.Web.UI.WebControls.LoginCancelEventHandler”匹配,这让我失去了。
      • PasswordRecovery1_VerifyingUser 应该具有 System.Web.UI.WebControls.LoginCancelEventArgs 类型的第二个参数:msdn.microsoft.com/en-us/library/… 不是 MailMessageEventArgs 类型。您还需要检查用户名是否确实与电子邮件地址模式匹配,否则 GetUsernameByEmail 将返回 null 并清空 UserName 字段。
      • 谢谢你,Zhaph,我真的没有想到我发送了错误的参数类型。它现在正在工作。
      猜你喜欢
      • 2017-05-05
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2016-08-10
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多