2012-06-25 8 views
0

여기에 성가신 점이 있습니다. 인증 및 WinForms 프런트 엔드에 웹 서비스를 사용하는 다중 계층 CAB 응용 프로그램에서 작업하고 있습니다.로그인 일시 중지/일시 중지 만료 된 비밀번호 변경

이제 비밀번호 만료를 구현하라는 요청을 받았으며 필요한 세부 정보를 얻었으며 사용자의 비밀번호가 만료되었는지 만 확인했습니다. 로그인 프로세스를 일시 중지하는 데 문제가 있습니다. ChangePassword 양식으로 "재 지정"됩니다.

내가 해왔 던 것은 PasswordExpiredException (System.Exception을 상속하고 나중에 작동하지 않을 때 ApplicationExcetion)이라는 사용자 지정 예외를 throw하고 catch에서 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 

답변

3

예외를 던지는 대신 AuthenticationResult을 반환하는 것을 고려할 것입니다. 제어 흐름을 조작하기 위해 예외 처리를 사용하려고합니다. 예외는 예외적이어야합니다. 당신이 제안하는 것은 완전히 합법적 인 비즈니스 규칙처럼 들립니다.

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

다음 예외를 처리하는 대신 다음에 수행 할 작업을 결정하기 위해 반환 된 개체를 쿼리 할 수 ​​있습니다.

+0

감사합니다. – Dani

0

암호는 로그인시 예외 조건없는 만료 (그것은이있을 수 있습니다 다른 경우 (예 : 특정 작업에 대한 승인을 확인할 때와 같이), 로그인 방법에서 PasswordExpiredException을 던지는 것이이 경우 흐름을 제어하는 ​​최선의 방법이 아닐 수 있습니다.

아마도 로그인 메서드는 암호가 만료되었다는 것을 나타내는 부울을 포함하는 사용자 개체를 반환하거나 로그인시 out 매개 변수를 사용하여 동일한 정보를 반환 할 수 있습니다. 가능한 경우 나는 out 매개 변수를 피하고 싶기 때문에 전자를 선호합니다.

관련 문제