2013-10-10 2 views
0

양식이 로그인 페이지를 통해 로그인 한 후에 만 ​​양식에 대한 액세스를 허용하기 위해 양식 인증을 사용하려고합니다. 로그인하고 리디렉션을 시도하면 로그인 페이지로 다시 리디렉션됩니다. 양식 인증 문제

웹 로그인 제어

protected void WebGenLogin_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     //Verify user against active directory 
     if (new AD().validate(WebGenLogin.UserName, WebGenLogin.Password)) 
     { 
      Session["UserAuthentication"] = WebGenLogin.UserName; 
      Session.Timeout = 30; 
      FormsAuthentication.RedirectFromLoginPage(WebGenLogin.UserName, WebGenLogin.RememberMeSet); 
      Response.Redirect("~/WebGen/Gen/Create.aspx"); 
     } 
     else 
     { 
      Session["UserAuthentication"] = ""; 
      Response.Redirect("http://thekickback.com/rickroll/rickroll.php"); 
     } 
    } 

Create.aspx의 Web.config

<authentication mode="Forms"> 
    <forms defaultUrl="~/WebGen/Gen/Create.aspx" loginUrl="../Login.aspx" slidingExpiration="true" timeout="30" /> 
    </authentication> 
+2

대답이 아니지만 세션에 사용자 이름을 저장하면 안됩니다. 대신 다른 페이지에서 'this.User'를 사용하여 사용자 이름을 검색하십시오. –

+0

ok 세션에서 사용자 이름을 저장하지 못하게했습니다. 아직도 물론 원래 문제지만, 팁 주셔서 감사합니다. – Tsukasa

+0

Fiddler를 실행하고 로그인 페이지의 응답에서 폼 인증 쿠키를 찾습니다. 쿠키가 있으면 쿠키가 사용자가 탐색하는 페이지에 대한 다음 요청에서 지속되는 경우 폼 인증 쿠키를 찾습니다. –

답변

0

코드가 실제로 작동했습니다. IIS에서이 문제를 발견했습니다. 전체 폴더 구조를 다른 부분보다는 응용 프로그램으로 전환해야했습니다.

0

당신이 시도 할 수 :

if (new AD().validate(WebGenLogin.UserName, WebGenLogin.Password)) 
{ 
     Session["UserAuthentication"] = WebGenLogin.UserName; 
     Session.Timeout = 30; 
     FormsAuthentication.SetAuthCookie(WebGenLogin.UserName, false); 
     FormsAuthentication.RedirectFromLoginPage(WebGenLogin.UserName, WebGenLogin.RememberMeSet); 

     ***SNIP*** 
+0

동일한 결과, 다시 로그인 페이지로 리디렉션 됨 – Tsukasa

0

모르겠어요 객체 광고의 유형 ()가 호출되지만 기본 ASP.NET 멤버 자격 기능을 사용하지 않을 수 있습니다. 필자가 기억 하듯이, 회원 등급의 ValidateUser 메소드는 true를 반환하는 경우 실제로 사용자를 로깅하는 부작용이 있습니다.

사용자를 인증 한 후 HttpContext.User를 해당 사용자를 나타내는 새 IPrincipal로 설정하고 해당 개체를 리디렉션하기 전에 FormsAuthentication.SetAuthCookie()를 호출해야 할 수 있습니다.

+0

모든 AD()는 활성 디렉토리 서버에 대한 자격 증명을 확인하고 bool을 반환하면 아무것도 수행되지 않습니다. 나는 정확하지 않을 수도 있지만 같은 결과를 추가했습니다. HttpContext.Current.User = new System.Security.Principal.GenericPrincipal (새 System.Security.Principal.GenericIdentity (WebGenLogin.UserName), null); – Tsukasa

+0

현재 사용자를 설정 한 후에 SetAuthCookie()를 호출 했습니까? (Chris Hardie의 답변에는 예가 있지만 교장을 만드는 것을 건너 뜁니다.) – NYCdotNet

0

좋습니다. 알아 냈습니다. 그것은 내 코드와 관련이 없습니다. 그러나 세션에서 사용자 이름 저장을 제거했습니다.

IIS의 루트 사이트를 응용 프로그램으로 변경해야합니다. 인증 모드 줄이 Login.aspx와 함께 루트에 배치되었습니다. Create.aspx가 다른 폴더에 있습니다. Web.config에서 인증 모드를 제거하고 거부 섹션에 넣으면 모든 것이 올바르게 작동합니다.