2013-08-10 1 views
5

ASP.net을 사용하는 웹 사이트가 있습니다 ... Visual Web Developer에서 액세스 한 ASP.net 웹 사이트 관리 도구를 사용하여 사용자 액세스를 추가/수정합니다. 사이트에. 자동 로그인을 위해 "내 계정 기억"확인란을 선택한 경우 쿠키를 제거하기 전에는 계정을 사용 중지하거나 삭제해도 아무런 영향이 없습니다. 왜 이런거야? 액세스를 거부하거나 비활성화되거나 삭제 된 계정의 오류 메시지로 리디렉션되는 코드 유형에 논리를 넣을 수 있습니까?계정이 비활성이거나 데이터베이스에서 삭제 된 경우 ASP.NET 사용자가 계속 로그인 할 수 있습니다.

이 현재 내가 뒤에 내 코드에있을 것입니다 ...

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init 

    If User.Identity.IsAuthenticated Then 
     Response.Redirect("~/homepage") 
    End If 

End Sub 

또한이가 후 Page_Init 섹션 아래에 ... 도움을

Protected Sub LoginUser_LoginError(sender As Object, e As System.EventArgs) Handles LoginUser.LoginError 

    LoginUser.FailureText = "Invalid Username or Password - Please Try Again" 

    Dim usrInfo As MembershipUser = Membership.GetUser(LoginUser.UserName) 

    If usrInfo IsNot Nothing Then 
     If usrInfo.IsLockedOut Then 
      LoginUser.FailureText = "Your account has been locked - Contact the system administrator" 
     ElseIf Not usrInfo.IsApproved Then 
      LoginUser.FailureText = "Your account is disabled - Contact the system administrator" 
     End If 
    End If 

End Sub 

감사합니다!

+0

사용자 IsAuthentricated인지 확인하는 것 외에, 사용자 계정이 아직 활성 상태인지 확인하는 방법도 있습니다. –

+0

사용자가 활성화되어 있는지 확인하려면 어떻게해야합니까? –

+0

GetUser 메소드가 있습니다. 사용자가 더 이상 존재하지 않으면 null을 반환합니다. http://msdn.microsoft.com/en-us/library/40w5063z.aspx –

답변

4

사용자가 알아 차렸 듯이 IsAuthenticated은 제거 된 후에도 true를 반환합니다. 이는 호출이 시스템에 여전히 존재하는 인증 쿠키의 내용 만 검사하기 때문입니다.

이 솔루션 중 하나는 사이트에 대한 역할 기반 보안을 설정하는 것입니다. 역할을 사용한다는 것은 특정 카테고리의 사용자 (예 : 사용자)로부터 사이트 섹션을 보호 할 수 있음을 의미합니다. 관리 페이지를 계정의 서브 세트에서만 볼 수있게합니다.

이 역할 정보는 쿠키가 아니라 백업 저장소에 저장되므로 매번 올바르게 체크되어야합니다. 또한 사용자가 삭제되면 삭제되므로 보호 된 페이지는 삭제 되 자마자 사용자가 액세스 할 수 없게됩니다.

웹 기반 도구를 통해이 모든 것을 관리 할 수 ​​있어야합니다. 여기

더 :

http://msdn.microsoft.com/en-us/library/5k850zwb.aspx

1

해결책은 간단하다 : global.asax.cs 년으로 session_start을 구현하고 데이터베이스에 존재하지 않는 경우 사용자가 로그 아웃 :

protected void Session_Start() 
    { 
     if (User.Identity.IsAuthenticated 
      && // !(user exists in the database) 
      ) 
     { 
      // Remove this forms-authentication cookie, and redirect to sign in without processing this request any further. 
      FormsAuthentication.SignOut(); 
      FormsAuthentication.RedirectToLoginPage(); 
     } 
    } 
+0

사용자가 브라우저를 다시 열 때만 발생합니다. – Faiz

관련 문제