ASP.NET에서 일부 페이지를 로그인 해야하는 가장 좋은 방법은 무엇입니까?
-
20-08-2019 - |
문제
일부 페이지에 인증이 필요한 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>
다른 팁
마스터 페이지로드 이벤트 에서이 코드를 시도 할 수 있습니다.이 코드를 작성하고 속성을 추가하십시오.
공개 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
파일.