2009-09-17 5 views
3

나는 어떤 작업을 준비하기 위해 인증과 권한 부여를 가지고 놀고 있습니다. 두 페이지를 만들었습니다 : Login.aspx와 Default.aspx. config 파일에서 나는 양식에 대한 인증을 설정하고 인증되지 않은 사용자의 액세스를 거부했습니다 내가 Login.aspx 내 사용자를 인증하는 몇 가지 간단한 코드를 작성했습니다ASP.NET : 코드의 사용자 인증

다음
<authentication mode="Forms"> 
     <forms name="aaa" defaultUrl="~/Login.aspx" /> 
    </authentication> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

:

protected void Page_Load(object sender, EventArgs e) 
     { 
      GenericIdentity identity = new GenericIdentity("aga", "bbb"); 
      Context.User = new GenericPrincipal(identity, new String[] { "User" }); ; 
      Response.Redirect("~/Default.aspx"); 
     } 

내가 실행 리디렉션이 수행되지 않습니다. 대신 사용자가 인증되지 않았기 때문에 Login.aspx가 계속 호출됩니다 (Context.User.Identity.IsAuthenticated는 모든로드에서 false 임). 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

7

Context.User이다. 리디렉션이 발생하면 현재 요청이 끝나고 새 요청이 재정의되지 않은 주체로 다시 시작됩니다 (이는 인증되지 않은 것입니다). 따라서 Context.User 설정은 실제로 아무것도 인증하지 않습니다.

FormsAuthentication.SetAuthCookie()을 사용하면 사용자의 쿠키를 FormsAuthentication 공급자가 수락 한 유효한 값으로 설정하거나 URL에 토큰을 넣습니다. 쿠키는 앞으로의 요청에 대해 사용자와 분명히 얽혀 있기 때문에 마음의 콘텐츠로 리디렉션 할 수 있습니다. MSDN에서

EM (추가) : 사용자 를 인증하지만 여전히 리디렉션와 탐색의 통제를 유지하고자 할 때 폼 인증으로

, 당신은 SetAuthCookie의 방법을 사용할 수 있습니다.

언급 한 바와 같이

이 반드시 쿠키를 필요로하지 않습니다 - 이름이 약간 오해의 소지가있다, 그것은 여전히 ​​URL을 통해 작동하기 때문에있는 FormsAuthentication는 쿠키 모드에있는 경우 :

SetAuthCookie 방법은 폼을 추가 CookiesSupported가 false 인 경우 Cookie 컬렉션 또는 URL에 대한 인증 티켓.

+0

서버.Response.Redirect 대신이 문제를 해결해야합니다. –

+0

@Chris 현재 요청에 대해서만 - 다음 요청까지 문제가 지연됩니다. –

0

로그인을 설정하려면 실제로 formsAuthentication 공급자를 호출해야합니다.

FormsAuthentication.RedirectFromLoginPage (txtUser.Text, chkPersistLogin.Checked)는

는 현재 요청의 주체를 설정하는 간단한 예

+0

내가 리디렉션되는 사용자를 원하지 않는다면? 난 그저 그를 인증하는 방법을 알고 싶습니다 – agnieszka

+0

그래도 어쨌든 작동하지 않습니다 – agnieszka

0

더미 Context.User를 만든 후에는 FormsAuthentication.SetAuthCookie 또는 RedirectFromLoginPage 메서드를 수행해야합니다.

1

실제로 사용자를 인증 된 사용자로 설정해야합니다. 다음의 모든 방법이 작동하고 실제로 로그인 화면에서 빠져 나갈 수 있습니다.

FormsAuthentication.Authenticate() 
FormsAuthentication.RedirectFromLoginPage() 
FormsAuthentication.SetAuthCookie() 

같은 결과를 얻으려면 다양한 방법이 있습니다.