摘要 C/S端軟體,左側導航菜單+右側頁面切換的佈局很常見。 這篇文章介紹下使用ContentControl控制項和TabControl控制項如何實現基礎的頁面切換。 一、使用ContentControl實現頁面切換 頁面使用UserControl來實現。 基於MVVM框架的思想,利用數據綁定機制,將控 ...
入門實戰-用戶登錄,記錄Cookie,使用Session
用戶登錄功能是做項目開發的必備功能,各個業務點中都要讀取和使用用戶信息,所以用戶登錄,並記錄用戶信息可以使用Cookie,Session等功能。
(1).先在Home視圖內建立一個Login.cshtml的登錄文件,代碼如下
(2).然後是Action的編寫;還是2個action,一個HttpGet,一個HttpPost;
(3).在HttpPost類型的Action Login內,要進行密碼的驗證和緩存數據;我貼出代碼,註意看關鍵行註釋說明;
[HttpPost] public IActionResult Login(string userName,string passWord) { string uName = userName; string uPass = passWord;//此處可以對密碼進行加密處理 //以用戶名,密碼為條件,從資料庫獲取用戶對象; //if(User!=null){則將用戶對象使用Cookie/Session緩存} //代碼假定用戶名=admin 密碼=123456 if (uName=="admin" && uPass=="123456") { //1.最簡單的Cookie用法(不安全的): CookieOptions options = new CookieOptions(); options.Expires = DateTime.Now.AddMinutes(10);//10分鐘後過期 Response.Cookies.Append("cookie_UserName", uName, options);//設置用 Response.Cookies.Append("cookie_UserPass", uPass, options);//設置密碼 string _userName = Request.Cookies["cookie_UserName"];//讀取cookie用戶名 string _userPass = Request.Cookies["cookie_UserPass"];//讀取cookie密碼 ViewData["_userName"] = _userName; ViewData["_UserPass"] = _userPass; //2.使用基於Claim的 Cookie加密認證 //使用前,可以在Startup.cs中配置Cookie信息 var claims = new[] { new Claim(ClaimTypes.Name,uName), new Claim("UserPass",uPass) //還可以添加登錄時間,ip等信息 }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); ClaimsPrincipal user = new ClaimsPrincipal(claimsIdentity); HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user, new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTimeOffset.Now.AddMinutes(20) } ); return RedirectToAction("Index", "Home");//不同Controller的跳轉寫法 //return Redirect("Privacy");//同一個Controller下的寫法 } else { return RedirectToAction("Error", "Home"); } }
(4).在Index的action內,要進行一個判讀讀取;
(5).在Index.cshtml中進行用戶信息的讀取顯示,但是發現,讀取Claims的信息時,沒有成功,雖然在Login的Action內,做了設置,但還沒有在startup.cs中配置Cookie信息;
(6).在Startup.cs文件中,配置Cookie,這樣就可以讀取到Claims的信息;
(7).在導航中做個判斷,用戶登錄,顯示【用戶名】和退出,否則顯示【登錄】
(8).在HomeController中等登錄Login Action下增加一個Logout,用來實現退出功能
(8).Session的簡單實用實例,先在Startup.cs中配置一下session的有效期;在startup.cs的Configure方法中,增加app.UseSession();
(9).還是在Login的Action中,增加一段Session設置和讀取的代碼
(10).最後可以檢驗一下2分鐘後,退出時,看看還不能獲取到session值。
(11).在導航菜單上再加上驗證,比如在點擊上傳文件時,如果用戶沒登錄,則直接跳轉到登錄頁(預設跳轉已經在startup.cs的cookie設置中配好了url)。首先還是需要在startup.cs中添加引用,然後在上傳文件的Action上增加[Authorize]聲明,這樣在點擊導航[上傳文件]時,直接就跳轉到了登錄頁面。照此操作,你可以將要驗證的Action或者整個類都聲明上均可。