ASP.NET에서 일부 페이지를 로그인 해야하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/477607

문제

일부 페이지에 인증이 필요한 ASP.NET 웹 사이트 프로젝트와 함께 작업하고 있습니다. ASP.NET 멤버십을 사용하고 있습니다.

나는 몇 가지 답을 읽었다. 예를 들어 폴더에서 해당 모든 페이지를 만들고 권한을 설명하는 내부 웹을 만듭니다. 이것은 문제를 해결하는 한 가지 방법이지만 더 고칠 수 있고 효과적인 방법이 필요합니다.

도움이 되었습니까?

해결책

web.config에서 하드 코드를 원하지 않으면 "기본 페이지"유형 컨트롤을 구현해야합니다.

기본 페이지 클래스는 System.web.ui.page에서 상속해야하며 "사용자는 로그인해야합니다"또는 "사용자가 역할 X에 있어야한다"고 말할 수있는 메소드가 있어야합니다. t 그 역할에서 로그인 페이지로 리디렉션합니다 (전화를 통해 얻을 수 있습니다. formsauthentication.loginurl).

실제 페이지는 System.web.ui.page에서 직접이 아닌이 클래스에서 상속해야합니다. 그런 다음, init와 같은 또는 page_load의 상단에서

base.UserMustBeLoggedIn();

또는

// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");

그리고 기본 페이지가 이것을 처리하도록하십시오.

데이터베이스에 액세스 권한을 저장하려면 모든 처리를 기본 페이지로 이동하고 페이지 라이프 사이클의 적절한 위치에서 데이터베이스 테이블에 대한 현재 URL을 확인하고 사용자 역할/인증을 확인하십시오. 요구 사항에 비해 필요에 따라 리디렉션됩니다.


웹 구성에서 페이지 수준 보안을 만들 수 있습니다.

<configuration>
  <location path="LockedPage.aspx">
    <system.web>
      <authorization>
        <!-- Deny access to anonymous users -->
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

자세한 내용은 MSDN에서 확인할 수 있습니다. 위치 요소 그리고 승인 요소.

다른 팁

마스터 페이지로드 이벤트 에서이 코드를 시도 할 수 있습니다.이 코드를 작성하고 속성을 추가하십시오.

공개 bool m_bloginRequired = true;

public bool IsLoginRequired
{
    get { return m_bLoginRequired; }
    set { m_bLoginRequired = value; }
}



try
        {
            // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetNoStore();
            if (IsLoginRequired==true)
            {
                    if ( Session.IsNewSession  || HttpContext.Current.Session["Username"] == null)
                    {
                        FormsAuthentication.SignOut();
                        FormsAuthentication.RedirectToLoginPage("Session Expired");
                        Response.End();
                    }
                }
            }
        catch (Exception ex)
        {
            throw (ex);
        }

이제 로그인 페이지 에서이 코드를 작성해야합니다.

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false);  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,  FormsAuthentication.Encrypt(ticket));
            cookie.Name = "jay";
            Session["UserName"] = txt_UserName.Text.Trim();
            Response.Cookies.Add(cookie);
            txt_UserName.Text = "";
            txt_Password.Text = "";
            Response.Redirect("HomePage2.aspx");

이제 로그인 페이지에서 PageInit 이벤트를 추가 할 수 있습니다.

protected void Page_PreInit(object sender, EventArgs e)
    {
        Master.IsLoginRequired = false; 
    }

사용자가 UN 승인 페이지에 액세스 할 수 있으시면 해당 페이지의 페이지 이벤트에서

설정 Master.IsLoginRequired=false;

또한 loginurl을 지정하십시오 web.config 파일.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top