ASP.NET?MVC5網(wǎng)站開發(fā)用戶登錄、注銷(五)
本文實(shí)例為大家分享了ASP.NET MVC5網(wǎng)站開發(fā)用戶登錄、注銷的具體方法,供大家參考,具體內(nèi)容如下
一、創(chuàng)建ClaimsIdentity
ClaimsIdentity(委托基于聲明的標(biāo)識(shí))是在ASP.NET Identity身份認(rèn)證系統(tǒng)的登錄時(shí)要用到,我們?cè)赨serService中來生成它。
1、打開IBLL項(xiàng)目InterfaceUserService接口,添加接口方法ClaimsIdentity CreateIdentity(User user, string authenticationType);
2、打開BLL項(xiàng)目的UserService類,添加CreateIdentity方法的實(shí)現(xiàn)代碼
public ClaimsIdentity CreateIdentity(User user, string authenticationType) { ClaimsIdentity _identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie); _identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName)); _identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.UserID.ToString())); _identity.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity")); _identity.AddClaim(new Claim("DisplayName", user.DisplayName)); return _identity; }
二、獲取AuthenticationManager(認(rèn)證管理器)
打開Ninesky.Web項(xiàng)目 Member區(qū)域的UserController,添加AuthenticationManager屬性,在HttpContext.GetOwinContext()中獲取這個(gè)屬性。
#region 屬性 private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } #endregion
三、創(chuàng)建登錄視圖模型
Member區(qū)域的模型文件夾添加視圖模型
using System.ComponentModel.DataAnnotations; namespace Ninesky.Web.Areas.Member.Models { /// <summary> /// 登錄模型 /// <remarks> /// 創(chuàng)建:2014.02.16 /// </remarks> /// </summary> public class LoginViewModel { /// <summary> /// 用戶名 /// </summary> [Required(ErrorMessage = "必填")] [StringLength(20, MinimumLength = 4, ErrorMessage = "{2}到{1}個(gè)字符")] [Display(Name = "用戶名")] public string UserName { get; set; } /// <summary> /// 密碼 /// </summary> [Required(ErrorMessage = "必填")] [Display(Name = "密碼")] [StringLength(20, MinimumLength = 6, ErrorMessage = "{2}到{1}個(gè)字符")] [DataType(DataType.Password)] public string Password { get; set; } /// <summary> /// 記住我 /// </summary> [Display(Name = "記住我")] public bool RememberMe { get; set; } } }
四、創(chuàng)建登錄頁面
在UserCcontroller中添加(string returnUrl) action
/// <summary> /// 用戶登錄 /// </summary> /// <param name="returnUrl">返回Url</param> /// <returns></returns> public ActionResult Login(string returnUrl) { return View(); }
右鍵添加強(qiáng)類型視圖,模型為LoginViewModel
@model Ninesky.Web.Areas.Member.Models.LoginViewModel @{ ViewBag.Title = "會(huì)員登錄"; } @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>會(huì)員登錄</h4> <hr /> @Html.ValidationSummary(true) <div class="form-group"> @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Password, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Password) @Html.ValidationMessageFor(model => model.Password) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.RememberMe, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.RememberMe) @Html.ValidationMessageFor(model => model.RememberMe) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="登錄" class="btn btn-default" /> </div> </div> </div> } @section Scripts { @Scripts.Render("~/bundles/jqueryval") }
效果
五、創(chuàng)建用戶登錄處理action
在UserCcontroller中添加 httppost類型的 Login action中先用ModelState.IsValid看模型驗(yàn)證是否通過,沒通過直接返回,通過則檢查用戶密碼是否正確。用戶名密碼正確用CreateIdentity方法創(chuàng)建標(biāo)識(shí),然后用SignOut方法清空Cookies,然后用SignIn登錄。
[ValidateAntiForgeryToken] [HttpPost] public ActionResult Login(LoginViewModel loginViewModel) { if(ModelState.IsValid) { var _user = userService.Find(loginViewModel.UserName); if (_user == null) ModelState.AddModelError("UserName", "用戶名不存在"); else if (_user.Password == Common.Security.Sha256(loginViewModel.Password)) { var _identity = userService.CreateIdentity(_user, DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = loginViewModel.RememberMe }, _identity); return RedirectToAction("Index", "Home"); } else ModelState.AddModelError("Password", "密碼錯(cuò)誤"); } return View(); }
六、修改用戶注冊(cè)代碼
讓用戶注冊(cè)成功后直接登錄
七、注銷
在UserCcontroller中添加在Logout action
/// <summary> /// 登出 /// </summary> /// <returns></returns> public ActionResult Logout() { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); return Redirect(Url.Content("~/")); }
本文已被整理到了《ASP.NET MVC網(wǎng)站開發(fā)教程》,歡迎大家學(xué)習(xí)閱讀,更多內(nèi)容還可以參考ASP.NET MVC5網(wǎng)站開發(fā)專題學(xué)習(xí)。
本文主要是用到了ClaimsIdentity(基于聲明的標(biāo)識(shí))、AuthenticationManager的SignOut、SignIn方法。希望對(duì)大家實(shí)現(xiàn)用戶注冊(cè)和注銷有所幫助。
相關(guān)文章
asp.net中SqlCacheDependency緩存技術(shù)概述
這篇文章主要介紹了asp.net中SqlCacheDependency緩存技術(shù)概述,是大型web程序設(shè)計(jì)中常用的技術(shù),本文對(duì)此進(jìn)行了較為詳細(xì)的描述,需要的朋友可以參考下2014-08-08ASP.NET MVC下自定義錯(cuò)誤頁和展示錯(cuò)誤頁的方式
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC下自定義錯(cuò)誤頁和展示錯(cuò)誤頁的方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11.NET Core 2.0如何生成圖片驗(yàn)證碼完整實(shí)例
這篇文章主要給大家介紹了關(guān)于.NET Core 2.0如何生成圖片驗(yàn)證碼的相關(guān)資料,該功能主要是利用ZKWeb.System.Drawing來實(shí)現(xiàn),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Asp.Net Core Identity 隱私數(shù)據(jù)保護(hù)的實(shí)現(xiàn)
這篇文章主要介紹了Asp.Net Core Identity 隱私數(shù)據(jù)保護(hù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01asp.net 用繼承方法實(shí)現(xiàn)頁面判斷session
在做ASP項(xiàng)目的時(shí)候,判斷用戶是否登陸常用的方法是在每個(gè)頁面判斷session是否存在,無奈用java的時(shí)候過濾器就用的不熟。。。還是用繼承吧。汗。。。2009-09-09