0

ここで困ったことがあります。私は、認証用の Web サービスと WinForms フロントエンドを使用する多層 CAB アプリケーションに取り組んでいます。

今、パスワードの有効期限を実装するように求められ、必要な詳細を取得し、それらを使用してユーザーのパスワードの有効期限が切れているかどうかを確認しました。唯一のことは、ログインプロセスを一時停止して「リダイレクト」するのに問題があることですChangePassword フォーム。

私が試してきたのは、PasswordExpiredException というカスタム例外をスローし (それが機能しなかった場合は System.Exception を継承し、後で ApplicationExcetion を継承します)、キャッチで ChangePassword.ShowDialog() を呼び出すことです。これは、パスワードの有効期限が切れている場合、私がよく言っていることを実行し、ログオン時に見苦しい例外をスローするため、頭痛の種です。

それで、仕事が終わったら例外をスロー解除できますか?または、アイデアを破棄して「適切に」実行する必要がありますか? それが何なのか見当もつかない

ログオン時のコールスタックの基本的な実行~~>

Logon.Cs.btnOK_Click ~~> wsAuthentication.GetProvider(GetUserDBInstace(UserName))~~>
ASPNETAuthentication.Authenticate(username,password)~~>
CheckIfExipred(MembershipUser.LastPasswordChangedDate) 
~Y~> throw PasswordExpiredException; //getting it to go back all the way to the UI, opening up ChangePassword.cs, leaving me with an authenticated user who's about to change his old password
~N~> //continue login, ignoring all my hard work
4

2 に答える 2

3

例外をスローする代わりに、何らかのAuthenticationResult. 例外処理を使用して制御フローを操作しようとしているようです。例外は例外的であるべきです。あなたが提案していることは、完全に正当なビジネス ルールのように聞こえます。

public class AuthenticationResult {
  public bool AreCredentialsValid { get; set; }
  public bool IsAccountLocked { get; set; }
  public bool RequiresPasswordChange { get; set; }
}

次に、例外を処理しようとする代わりに、返されたオブジェクトを照会して次に何をすべきかを判断できます。

于 2012-06-25T14:14:07.413 に答える
0

期限切れのパスワードは、ログイン時の例外的な状態ではありません (特定のアクションの承認を確認するときなど、他の場合もあります)。そのためPasswordExpiredException、この場合、ログイン メソッドからをスローすることは、おそらくフローを制御する最良の方法ではありません。

おそらく、ログイン メソッドは、パスワードの有効期限が切れていることを示すブール値を含むユーザー オブジェクトを返すかout、ログインでパラメーターを使用して同じ情報を返すことができます。out可能であればパラメーターを避けたいので、前者を好みます。

于 2012-06-25T14:12:30.617 に答える