淺談MVC Form認證

 

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

在作MVC項目時,用戶登陸認證須要選用Form認證時,咱們該怎麼作呢?下面咱們來簡單給你們說一下。ide

首先說一下步驟spa

一、用戶登陸時,若是校驗用戶名密碼經過後,須要調用FormsAuthentication.SetAuthCookie()這個方法。code

二、用戶退出時,須要調用FormsAuthentication.SignOut();方法orm

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

四、校驗:HttpContext.User.Identity.IsAuthenticated,若是是false,則沒有經過認證,若是是true,則經過了認證繼承

以上這三部,便可完成用戶登陸的Form認證了。get

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

一、創建一個用於用戶登陸用的Modelstring

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

二、創建登陸用的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     }

三、創建一個登陸後,用戶跳轉的頁面與Controller

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

四、登錄後跳轉的頁面的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認證的使用,具體的細節問題,你們能夠參考園中的大神們的博文。

相關文章
相關標籤/搜索