2009-06-08 6 views
2

ユーザーにUserNameを覚えさせるのではなく、電子メールアドレスを入力してパスワードをリセットして送信するようにします。UserNameの代わりに電子メールを使用するPasswordRecovery

私は、ASP .Net PasswordRecoveryコントロールをメンバーシッププロバイダで使用しています。

システムは正常に動作し、パスワードをリセットしてユーザーに送信します。しかし、私は多くのユーザーが自分のUserNameを忘れていることがわかります。明らかに、私はそれらに電子メールにUserNameを含めます。

理想的には、私はユーザー名を完全に省いていますが、残念ながら私はUserNamesのユーザーには電子メールアドレスではありません。

私は簡単にパスワードリカバリコントロールを変更してユーザーの電子メールアドレスを尋ね、リセットパスワードとUserNameをそのアドレスに送信できますか?

ありがとう。

答えて

1

ユーザーが自分のユーザー名を知らない場合は、電子メールを提供し、FindUsersByEmailまたはGetUsernameByEmailを使用します。

メールアドレスがわからない場合は、ユーザー名を入力し、FindUsersByNameを使用します。

Cadeが指摘したように、あなたの質問はあなたの投稿からはっきりと分かりません。

+0

IはUserNameLabelText = "電子メール:" を付加しようとしたASPに= "PasswordRecovery1_VerifyingUser" OnVerifyingUser:PasswordRecovery、ボイドPasswordRecovery1_VerifyingUser(オブジェクト送信者、MailMessageEventArgs e)を保護 {PasswordRecovery1.UserName = System.Web.Securityを。 Membership.GetUserNameByEmail(PasswordRecovery1.UserName); }が関連付けられた.csファイル内にありますが、コントロールがエラーでコンパイルに失敗します。CS0123: 'PasswordRecovery1_VerifyingUser'のオーバーロードが、私を失う 'System.Web.UI.WebControls.LoginCancelEventHandler'デリゲートと一致しません。 – Degan

+1

PasswordRecovery1_VerifyingUserには、System.Web.UI.WebControls.LoginCancelEventArgsタイプの2番目のパラメータが必要です。http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.passwordrecovery.onverifyinguser.aspx MailMessageEventArgsと入力します。また、ユーザー名が実際に電子メールアドレスパターンと一致するかどうかを確認する必要があります。そうしないと、GetUsernameByEmailはnullを返し、UserNameフィールドを空にします。 –

+0

ありがとう、Zhaph、間違ったパラメータタイプを送信しているとは思っていませんでした。それは今働いている。 – Degan

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; 
    } 
} 
関連する問題