カスタムASPNetMembership FailureInformation常にnullの場合、OnValidatingPassword問題
-
26-09-2019 - |
質問
として記述は、当社が現段階において http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.onvalidatingpassword.aspx
"時のValidatingPasswordイベントが完成し、性質のValidatePasswordEventArgsオブジェクトとして供給されるeパラメータを調べることができるかどうか判断するために現在のディスカッションをキャンセル扱いとなれば、特定の例外に保存されFailureInformation財産、スローされます。"
ここでは一部の内容/コードはどんどんさんFailureInformationがnullの場合 http://forums.asp.net/t/991002.aspx
によっ会員の設定だと例外とパスワードに一致"しないパスワードによるセキュリティ条件のものではなかった。
しかしデバッグSystem.Web.ApplicationServices.dll(ます。NET4.0。ます。安保ホール)の枠組みコードを参照していただきました感がありますが、皆さん本組み立て、これ [TypeForwardedFrom("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public abstract class MembershipProvider : ProviderBase
簡単に私がステップずです。NET4.0組み立てがここに。かったのでチェックボルSystem.Web.ApplicationServices.dll 読み込まれます。
しかし、今まで一つだけとにかく、どうやtiの修正でオーバーライド方式OnValidatingPassword(ValidatePasswordEventArgs e)です。
私が私です。
するように設計されている一つである:
1)そのアイデアはなぜOnValidatingPasswordいます。
2)そのアイデアをどうステップです。
解決
持っているが、これを読んで http://forums.asp.net/t/991002.aspx>もう一回。ここに私のソリューションです。
//Override OnValidatingPassword
protected override void OnValidatingPassword(ValidatePasswordEventArgs args)
{
//Any logic to process password validation conditions
//e.g:
if (args.Password.Length < MinRequiredPasswordLength)
args.FailureInformation = new ArgumentException(String.Format("Password is too short, min password length {0}", MinRequiredPasswordLength.ToString()));
if (args.UserName == args.Password)
args.FailureInformation = new ArgumentException(String.Format("Password should not be equal to username"));
//Also here could be any logic to throw an exception if needed
//e.g:
if (args.FailureInformation != null)
throw args.FailureInformation;
//Calling base
base.OnValidatingPassword(args);
if (args.Cancel)
{
if (args.FailureInformation == null)
args.FailureInformation = new ArgumentException(String.Format("Custom Password Validation Failure for password '{0}'", args.Password));
throw args.FailureInformation;
}
}
他のヒント
あなたはOnValidatingPasswordメソッドをオーバーライドする必要はありませんが、ドキュメントはValidatingPasswordイベントを処理する必要が言うように。 MembershipValidatePasswordEventHandler のを確認してください。
を使用する.NETリフレクターとSqlMembershipProviderクラスのChangePasswordメソッドを検査します。あなたはSqlMembershipProviderがValidatingPasswordイベントに対して登録されたハンドラを持っていませんが表示されます。
だから、私は何の思考は、カスタムメンバシッププロバイダののOnInitあなたはMembership.ValidatingPasswordに登録して、あなたのコーディングを行うハンドラです。上記リンクのサンプル例
希望私はあなたの質問を誤解していません。
お問いを示すのにしましょうカスタム会員制プロバイダ?う思いimplmenting MembershipProviderす。
class MyMembershipProvider : MembershipProvider{...}
その場合、OnValidatingPasswordは自動的に---というお電話をください。
なので、基本的に私はかなりの混乱をきたしている。ここで示されてるセットアップ?を使用していまデフォルトの会員制プロバイダはカスタム?場合はカスタム、クラスを継承す。
どのコードを利用できるリフレクタのことを思い出します。