カスタム メンバーシップ プロバイダーを実装し、このプロバイダーを使用する Web ページでパスワードの変更を制御します。このメンバーシップ プロバイダー クラスの ChangePassword メソッドは、外部 Web サービスに接続することにより、パスワードの強度と有効性に関するいくつかのビジネス ロジックをチェックします。Web サービスには、新しいパスワードに問題がある場合 (長さの問題、必要な特殊文字など) を正確に返す機能があります。
ここで、カスタム プロバイダーによってオーバーライドする必要がある ChangePassword メソッドのシグネチャは次のとおりです。
public override bool ChangePassword(string username, string oldPassword, string newPassword)
したがって、ユーザーが提供する新しいパスワードの正確な問題を知っていても、このメソッドから true または false しか返すことができず、パスワード変更コントロールが引き継いで独自の処理を行うため、Web ページに表示できません。ブール値の戻り値に応じたマジック。OnChangePasswordError
コントロールのイベントをフックしてChangePassword
静的なエラー メッセージを表示することはできます。またFailureText
、エラーが発生したときにこのコントロールのプロパティをハードコードされた文字列に設定することもできますが、正確に何が問題なのかをユーザーに提供することはできません。彼らが提供したパスワードで。
protected void OnPasswordChangeError(object sender, EventArgs e)
{
throw new MembershipPasswordException("Tell user what exactly is wrong with the password they supplied");
}
MembershipProvider
クラスには、パスワードが変更される前に発生するイベントValidatingPassword
があり、パスワードが基準を満たしているかどうかを確認してここで例外をスローできますが、それでもその例外は ChangePassword コントロールに渡されないようです。ValidatingPassword eventHandler のコードは次のとおりです。
void MyMembershipProvider_ValidatingPassword(object sender, ValidatePasswordEventArgs e)
{
//if password not valid
e.Cancel = true;
e.FailureInformation = new MembershipPasswordException();
e.FailureInformation;
}
メンバーシップ プロバイダー クラスの ChangePassword メソッドから ChangePassword コントロールに特定の情報を送信して、正しい非静的/ハードコーディングされたパスワード変更エラー メッセージをユーザーに表示する方法を教えてください。ChangePassword コントロールで FailureInformation を取得できるように、ValidatePasswordEventArgs を OnChangePassword メソッドの EventHandler の EventArgs に接続する方法はありますか?
私の最初の調査から、これは可能ではないようです。MSチームはこれを見逃さなかったと思いますが、方法があるはずです.
いくつかの指針:
MembershipUser.ChangePassword が警告なしで失敗する http://forums.asp.net/t/983613.aspx