demoshop

demo, trying to be the best_

一個網站一定會遇到會員或是驗證登入的機制,就算你網站不是會員制,也至少有個後台讓你自己登入去修改些什麼,原本在 ASP.NET 就有 Membership 而且滿方便的,現在demo就來告訴你在 ASP.NET MVC 中一樣可以很方便的登入。

這篇之前就想寫了,因為之前在藍色小舖上有位網友詢問了如何在ASP.NET MVC 上實做登入機制
demo:「就用內建的登入最方便阿」
網友:「那個好麻煩我想和ASP一樣用session來作就好」
demo:「哪會麻煩很簡單阿」
網友:「我看官網介紹不是還要新增他專屬的資料庫很煩人」

當然我的建議最後沒被該網友建議,但是我真的想說,那真的很簡單阿.....所以就產生了這篇文。


一般來說我們不想使用.NET 幫我們用好的登入機制不外乎就是不想搞那11張表,但是我們可以創造出很簡單的環境來對應的原理 demo 會附到最後的參考的連結想要更透徹的網友我相信你們會去點擊觀看的,所以在這我就說明流程而已,先建立一個會員資料表來存放

表的欄位很簡單應該是不用介紹吧


設定好了資料表我們可以設計一個頁面來作登入機制

<%using (Html.BeginForm())
  {%>
    <p>帳號:<%=Html.TextBox("username")%></p>
    <p>密碼:<%=Html.Password("password")%></p>
    <input type="submit" value="登入" />
<%} %> 

Controller大約就是這樣(部份需要使用者自行實做)

public ActionResult Login()
{
    return View();
}
 
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(string acc, string Password)
{
   
    // 登入的密碼(以 SHA1 加密)
    Password = FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "SHA1");
 
    //這一條是去資料庫抓取輸入的帳號密碼的方法請自行實做
    var r = account.GetSingleAccount(acc, Password);
 
    if (r == null)
    {
        TempData["Error"] = "您輸入的帳號不存在或者密碼錯誤!";
        return View();
    }
 
    // 登入時清空所有 Session 資料
    Session.RemoveAll();
 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
      r.UserName,//你想要存放在 User.Identy.Name 的值,通常是使用者帳號
      DateTime.Now,
      DateTime.Now.AddMinutes(30),
      false,//將管理者登入的 Cookie 設定成 Session Cookie
      r.Rank.ToString(),//userdata看你想存放啥
      FormsAuthentication.FormsCookiePath);
 
    string encTicket = FormsAuthentication.Encrypt(ticket);
 
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
 
    return RedirectToAction("Index", "Home");
     
} 

這樣子就可以完成登入了,好處在哪? ASP.NET MVC 有一個很檢單就可以驗證是否登入的屬性加上去就好啦,比如我的某一頁必須要登入才可以使用那就這樣子就搞定了

[Authorize]
public ActionResult Account(string returnUrl)
{
    return View();
} 

是不是很方便?


想了解 Forms Authentication 的運作請參考保哥的文章
http://blog.miniasp.com/post/2008/02/Explain-Forms-Authentication-in-ASPNET-20.aspx

如果你有使用Role的需求可以看這篇
http://blog.miniasp.com/post/2008/06/How-to-define-Roles-but-not-implementing-Role-Provider-in-ASPNET.aspx

ASP.NET MVC 官方說明(重點看一下 Authorize 如何使用)
http://www.asp.net/learn/mvc/tutorial-17-cs.aspx
http://www.asp.net/learn/mvc/tutorial-18-cs.aspx

回應討論