驗證流程
一、用戶登錄
1、驗證表單:ModelState.IsValid
2、驗證用戶名和密碼:通過查詢數據庫驗證
3、如果用戶名和密碼正確,則在客戶端保存Cookie以保存用戶登錄狀態:SetAuthCookie
1):從數據庫中查出用戶名和一些必要的信息,并把額外信息保存到UserData中
2):把用戶名和UserData保存到 FormsAuthenticationTicket 票據中
3):對票據進行加密 Encrypt
4):將加密后的票據保存到Cookie發送到客戶端
4、跳轉到登錄前的頁面
5、如果登錄失敗,返回當前視圖
二、驗證登錄
1、在Global中注冊PostAuthenticateRequest事件函數,用于解析客戶端發過來的Cookie數據
1):通過 HttpContext.Current.User.Identity 判斷用戶是否登錄(FormsIdentity,IsAuthenticated,AuthenticationType)
2):從HttpContext 的Request的Cookie中解析出Value,解密得到 FormsAuthenticationTicket 得到UserData
2、角色驗證
1):在Action加入 Authorize特性,可以進行角色驗證
2):在 HttpContext.Current.User 的 IsInRole 方法進行角色認證(需要重寫)
一、用戶登錄
1、設置web.config
設置重定向登錄頁面
<system.web><authentication mode="Forms"> <forms name="loginName" loginUrl="/UserInfo/login" cookieless="UseCookies" path="/" protection="All" timeout="30"></forms></authentication></system.web>
注釋掉
<modules> <!--<remove name="FormsAuthentication" />--></modules>
2、登陸的驗證中控制器
控制器中加“[Authorize]”修飾的方法拒絕匿名。
public class UserInfoController : Controller //控制器 { //身份驗證過濾器 [Authorize] public ActionResult Index() { return View(); } }控制器中登錄
/// <summary> /// 用戶登錄 /// </summary> /// <returns></returns> public ActionResult login() { return View(); } [HttpPost] public ActionResult login(loginModels login) { if (ModelState.IsValid) { var model = db.Admininfo.FirstOrDefault(a => a.AdminAccount == login.AdminAccount && a.AdminPwd == login.AdminPwd); if (model != null) { //存入票據(用戶登錄的時候去存信息,如果有信息直接去登錄) var dtoModel = new Users { id = model.id, AdminPwd = model.AdminPwd, AdminAccount=model.AdminAccount }; //調用 SetAuthCookie(dtoModel); //獲取登錄地址 var returnUrl = Request["ReturnUrl"]; //判斷登錄地址是不是空值 if (!string.IsNullOrWhiteSpace(returnUrl)) { return Redirect(returnUrl); } else { //return RedirectiToAction return Redirect("/Home/index"); } } else { ModelState.AddModelError("", "賬號密碼不對"); return View(login); } } else { ModelState.AddModelError("", "輸入的信息有誤"); return View(login); }
新聞熱點
疑難解答
圖片精選