2017年9月18日 星期一

會員登入 與 FormsAuthentication (Web.Config裡面的 authentication mode="Forms")

會員登入 與 FormsAuthentication (Web.Config裡面的 )

用 Web.Config 鎖死後台管理區 需要權限的檔案,必須通過帳號、密碼才能登入(看得見)
本範例源自微軟MSDN的範例(予以簡化)


這是一個很老的方法(從.NET 2.0就有了)
topcat寫的最詳細,學習ASP.NET 2.0會員機制三部曲 www.dotblogs.com.tw/topcat/archive/2009/08/03/9821.aspx

我比較單刀直入,一個可用的範例PO出來就會做了
先看執行畫面:
      

      


您要改的地方,就是下面這幾個重點。檔案 Session_Login.aspx
有心研究的朋友,微軟MSDN網站查一下,都有!
   protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text == "123" && TextBox2.Text == "123")
        {    //基本上,底下這段幾乎是照抄!就能運作!       
            String groups = "Admin";   //群組(角色)。可以自己寫字串,也可以從資料庫裡面抓取您設定的數值。
            //Create the ticket, and add the groups.登入成功後,是否用Cookie記錄?
            bool isCookiePersistent = CheckBox1.Checked;
            //輸入參數: 使用 Cookie 名稱、版本、目錄路徑、核發日期、到期日期、永續性和使用者定義的資料
            // 此 Cookie 路徑設定為在Web.Config組態檔中建立的預設值,也就是  path="/"。
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, TextBox1.TextDateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups);   
            //-- 每個參數的用意 ---------------------------------------------------------------------------------------------
            //--  version  類型:System.Int32  票證(ticket)的版本號碼。
            //--  name  類型:System.String  與票證相關的使用者名稱。
            //--  issueDate  類型:System.DateTime  核發此票證時的本機日期和時間。
            //--  expiration  類型:System.DateTime  票證到期的本機日期和時間。
            //--  isPersistent  類型:System.Boolean  如果票證將存放於持續性 Cookie 中 (跨瀏覽器工作階段儲存),則為 true,否則為 false。 
            //           如果票證是存放於 URL 中,則忽略這個值。 
            //--  userData  類型:System.String  要與票證一起存放的使用者特定資料。
            //Encrypt the ticket. 加密,以策安全!
            String encryptedTicket = FormsAuthentication.Encrypt(authTicket);
            //底下的就是寫Cookie而已,請看 上集 第十六章「狀態管理
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            if (true == isCookiePersistent)
                authCookie.Expires = authTicket.Expiration;    // cookie過期日
            //Add the cookie to the outgoing cookies collection.
            Response.Cookies.Add(authCookie);
            //通過身份驗證的人,才能看見原本的網頁,例如Hello.aspx。
            //通過驗證後,自動回到(導向)原本想看的網頁。
            Response.Redirect(FormsAuthentication.GetRedirectUrl(TextBox1.Text, false));
        }
        else        {
            Response.Write("

登入失敗(帳號或密碼錯誤)

");
        }
    }
註解:  程式中用到的 FormsAuthentication ,請看 
................................................................................................................................................

Web.Config檔案裡面需要一些設定:
也因為 Web.Config檔鎖定了所有檔案,只要您想直接開啟(觀看)網頁,就會「被導向」登入畫面 ( 檔案 Session_Login.aspx )
帳號、密碼都正確後,才能看到這些「後台管理區」的網頁。
這樣的功能,您可以用本文範例來做(用 Web.Config 鎖死這些需要權限的檔案)
也可以自己寫,其實不會太困難喔,如下圖。
 
範例下載 --  https://onedrive.live.com/?id=6F7F668080F24B20%21115&cid=6F7F668080F24B20
檔名:WebSite3_Easy_Login_FormsAuthentication.rar  (C#)
      WebSite3_Easy_Login_FormsAuthentication_VB.rar  (VB)

動手先玩一下,知道他運作的流程。
然後再來審閱程式裡面的邏輯、參數的用法。

這個範例是從微軟MSDN範例裡面,簡化而來。特此感謝。
如果您要下載上面這個 Windows AD來作會員登入 範例,可以參閱我以前的文章:

      ASP.NET透過AD進行驗證 #4 -- 會員登入、會員專屬網頁 / Login AD Account


相關範例可以參考   topcat撰寫的 -- [範例]ASP.NET使用Session驗證練習範例

沒有留言: