asp.netの一部のページにログインを要求させる最良の方法は何ですか?
-
20-08-2019 - |
質問
一部のページで認証が必要なasp.net Webサイトプロジェクトで作業しています。 asp.netメンバーシップを使用しています。
いくつかの答えを読みました。例えばこれらのすべてのページをフォルダーに作成し、特権を記述する内部web.configを作成します。これは問題を解決する1つの方法ですが、より修正可能で効果的な方法が必要です。
解決
これをweb.configでハードコーディングしたくない場合は、<!> quot; Base Page <!> quot;を実装する必要があります。タイプコントロール。
ベースページクラスはSystem.Web.UI.Pageを継承する必要があり、<!> quot;ユーザーはログインする必要があります<!> quot;と言うメソッドを呼び出す必要があります。または<!> quot;ユーザーはロールx <!> quot;でなければならず、ユーザーがそのロールに属していない場合は、ログインページにリダイレクトします(これを取得するには、 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で詳細情報を入手できます:ロケーション要素および< a href = "http://msdn.microsoft.com/en-us/library/532aee0e.aspx" rel = "noreferrer">認可要素。
他のヒント
このコードを試すことができますが、 マスターページロードイベントでこのコードを記述し、 プロパティを追加
public 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;
}
ユーザーが認証されていないページにアクセスできるようにする場合 そのページのpageinitイベントで
Master.IsLoginRequired=false;
web.config
ファイルでloginurlも指定します。