1. 程式人生 > >淺談MVC Form認證

淺談MVC Form認證

blog nco 配置 pan del return 跳轉 urn isa

簡單的談一下MVC的Form認證。

在做MVC項目時,用戶登錄認證需要選用Form認證時,我們該怎麽做呢?下面我們來簡單給大家說一下。

首先說一下步驟

1、用戶登錄時,如果校驗用戶名密碼通過後,需要調用FormsAuthentication.SetAuthCookie()這個方法。

2、用戶退出時,需要調用FormsAuthentication.SignOut();方法

3、在配置文件web.config中,system.web 節點下, 配置<authentication mode="Forms"/>

4、校驗:HttpContext.User.Identity.IsAuthenticated,如果是false,則沒有通過認證,如果是true,則通過了認證

以上這三部,即可完成用戶登錄的Form認證了。

好了,下面我們來看一下具體的代碼。(View中的代碼就不貼了,只貼Controller中的代碼吧)

1、建立一個用於用戶登錄用的Model

1     public class LoginViewModel
2     {
3         [DisplayName("用戶名")]
4         public string UserName { get; set; }
5         [DisplayName("密碼")]
6         public string Password { get; set; }
7 }

2、建立登錄用的Controller與頁面,其中Controller裏面有登錄與退出兩個Action

 1     public class LoginController : Controller
 2     {
 3         // GET: Login
 4         public ActionResult Index(LoginViewModel loginViewModel)
 5         {
 6             if (loginViewModel.UserName == "admin" && loginViewModel.Password == "
123456") 7 { 8 FormsAuthentication.SetAuthCookie(loginViewModel.UserName, false); 9 return RedirectToAction("Index", "Main"); 10 } 11 return View(); 12 } 13 14 //GET: LogOut 15 public ActionResult LogOut() 16 { 17 FormsAuthentication.SignOut(); 18 return RedirectToAction("Index", "Login"); 19 } 20 }

3、建立一個登錄後,用戶跳轉的頁面與Controller

1     public class MainController : BaseController
2     {
3         // GET: Main
4         public ActionResult Index()
5         {
6             return View();
7         }
8     }

4、登陸後跳轉的頁面的Controller是繼承的BaseController,那麽BaseController是怎麽寫的呢?

 1     public class BaseController : Controller
 2     {
 3         protected override void OnActionExecuting(ActionExecutingContext filterContext)
 4         {
 5             base.OnActionExecuting(filterContext);
 6             //登錄認證處理
 7             if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
 8             {
 9                 //未登錄
10                 Response.Redirect("~/Login/Index");
11             }
12             else
13             {
14                 //已登錄,Action級權限控制處理
15                 var controllerName = filterContext.RouteData.Values["controller"].ToString();//控制器名稱
16                 var actionName = filterContext.RouteData.Values["action"].ToString(); //Action名稱
17                 //根據controllerName與actionName進行權限檢查
18                 /*
19                  if()
20                  { }
21                  else
22                  { }
23              */
24             }
25         }
26     }

這個BaseController很簡單,大體的作用就是,方式繼承這個BaseController的控制器,當執行其下面的Action時,會進行Form校驗,如果校驗成功,則……,如果校驗不成功則……,

登陸後的頁面的Controller都會繼承BaseController,這樣,就不用在每個Controller中的Action重復的寫Form認證的代碼了。

是不是很簡單?

當然,具體的細節問題這裏都沒有涉及到,這裏只是簡單的給大家介紹一下Form認證的使用,具體的細節問題,大家可以參考園中的大神們的博文。

淺談MVC Form認證