2009-08-30 2 views
0

ASP.NET 역할/구성원 기반 폼 인증 사이트가 있습니다. 특정 역할에 의해서만 액세스 할 수있는 하위 폴더와 페이지가 있습니다. 문제는 로그인 페이지에서 허용되지 않은 역할 그룹 로그인의 사용자가 있으면 로그인 페이지에 오류 메시지가 표시되지 않습니다. 즉, AllowedRole 로그인 사용자는 로그인 페이지에서 사용자를 보호 된 페이지로 올바르게 리디렉션하지만 NonAllowedRole의 사용자가 로그인하려고하면 로그인하지만 오류 메시지가 표시되지 않고 사용자가 다시 로그인하게됩니다. 정보없이 로그인 페이지로 이동하십시오. 로그인 양식에 FailureText가 설정되어 있지만 표시되지 않습니다. loginForm.LoginError 이벤트도 발생하지 않습니다. 이 코드를 시도했지만 다음 중 하나도 표시되지 않습니다.ASP.NET의 역할 기반 인증에 대한 로그인 오류 텍스트가 없습니다.

protected void frmLogin_LoggedIn(object sender, EventArgs e) 
     { 
      if (!User.IsInRole("AllowedRole")) 
       frmLogin.FailureText = "Access denied."; 
       //Label1.Text = "Access denied."; //doesn't work either 
     } 

무엇이 잘못 되었나요?

답변

1

어디서이 문서를 찾을 수 있는지 알 수 없습니다. 이 답변은 필자가 작성한 io 애플리케이션을 본 행동의 관찰을 기반으로합니다.

로그인 페이지는 허용 된 액세스 규칙에서 제외됩니다. 그것은 있어야합니다. 전체 사이트가 루트 수준에서도 익명 사용자를 허용하지 않는 사이트가 있다고 가정 해보십시오. 사용자가 로그인 할 수 있으려면 로그인 페이지에 액세스 할 수 있어야합니다.

딜레마를 해결하려면 레이블 (lblError라고 부름)을 추가하고 Page_Load에 다음을 추가해야합니다 (C# 예제 코드) :

if(User.IsLoggedIn) 
{ 
    If(!User.IsInRole("AllowedRole") 
    { 
     lblError.Text = "Access denied."; 
    } 


} 

추가 된이 더 생각을 Gving

는 이유 로그인 페이지에 오류가 오류가 사용자가 보호 된 페이지에 액세스하려고 할 때 무슨 일이 일어나고 있는지없는가 로그인 페이지가 아닙니다.

그러나 내 제안이 귀하의 상황에서도 효과가 있다고 생각합니다.

2

할 수있는 일은 ReturnUrl 쿼리 문자열 매개 변수를 확인하고 "거부"폴더 인 경우 사용자를 오류 페이지 또는 허용 된 로그인 페이지로 리디렉션하는 것입니다. 이처럼 : 그들은이 허용되지 않는 곳 요청 된 영역 인 경우

protected void frmLogin_LoggedIn(object sender, EventArgs e) 
{ 
    if (!User.IsInRole("AllowedRole") && 
     InRestrictedArea(Request.QueryString["ReturnUrl"])) 
    { 
     Response.Redirect("Not-Allowed-Here.aspx"); 
    } 
} 

확인하는 InRestrictedArea을 정의합니다.

+2

+1 좋은 생각입니다. 그것도 작동 할텐데, 나는 아직도 그가 User.IsLoggedIn을 점검해야한다고 생각한다. 나는 우리의 답을 조합하는 것이 그들 자신보다 더 낫다고 생각합니다. – David