一部のページで認証が必要なasp.net Webサイトプロジェクトを使用しています。私はasp.netメンバーシップを使用しています。
私はいくつかの答えを読みました。たとえば、これらのページをすべてフォルダーに作成し、特権を説明する内部 web.config を作成します。これは問題を解決する 1 つの方法ですが、より修正可能で効果的な方法が必要です。
一部のページで認証が必要なasp.net Webサイトプロジェクトを使用しています。私はasp.netメンバーシップを使用しています。
私はいくつかの答えを読みました。たとえば、これらのページをすべてフォルダーに作成し、特権を説明する内部 web.config を作成します。これは問題を解決する 1 つの方法ですが、より修正可能で効果的な方法が必要です。
これを web.config(s) にハード コードしたくない場合は、「ベース ページ」タイプのコントロールを実装する必要があります。
基本ページ クラスは System.Web.UI.Page から継承する必要があり、「ユーザーはログインしている必要があります」または「ユーザーはロール x にいる必要があります」と言うために呼び出すことができるメソッドが必要です。そのロールで、ログイン ページにリダイレクトします (これはFormsAuthentication.LoginUrlを呼び出すことで取得できます)。
実際のページは、System.Web.UI.Page から直接ではなく、このクラスから継承する必要があります。次に、Init などで、または Page_Load の先頭で呼び出します。
base.UserMustBeLoggedIn();
また
// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");
ベースページにこれを処理させます。
アクセス権をデータベースに保存したい場合は、すべての処理をベース ページに移動し、ページ ライフサイクルの適切な場所で、データベース テーブルに対して現在の URL を確認し、ユーザーの役割/認証を確認します。要件に反して、必要に応じてリダイレクトします。
次のように、Web 構成でページレベルのセキュリティを作成できることに注意してください。
<configuration>
<location path="LockedPage.aspx">
<system.web>
<authorization>
<!-- Deny access to anonymous users -->
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
詳細については、MSDN: The Location ElementおよびThe Authorization Elementを参照してください。
このコードを試すことができます。マスター ページの読み込みイベントで、このコードを記述し、プロパティを追加します。
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;
また、ファイルに loginurl を指定しweb.config
ます。