asp.netの一部のページにログインを要求させる最良の方法は何ですか?

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

質問

一部のページで認証が必要な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も指定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top