In diesem Artikel wird hauptsächlich der Authentifizierungsprozess für die Formularauthentifizierung in asp.net MVC vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor, um einen Blick darauf zu werfen
Verifizierungsprozess
1. Benutzeranmeldung
1 Formular: ModelState.IsValid
2. Überprüfen Sie den Benutzernamen und das Passwort: Überprüfen Sie dies durch Abfrage der Datenbank
3. Wenn der Benutzername und das Passwort korrekt sind, speichern Sie das Cookie auf dem Client, um den Benutzeranmeldestatus zu speichern: SetAuthCookie
1): Suchen Sie den Benutzernamen und einige notwendige Informationen in der Datenbank und speichern Sie die zusätzlichen Informationen in UserData
2): Speichern Sie den Benutzernamen und die Benutzerdaten im FormsAuthenticationTicket-Ticket
3): Verschlüsseln Sie das Ticket. Verschlüsseln
4) : Speichern Sie das verschlüsselte Ticket in Cookie und senden Sie es an den Client
4 Springen Sie vor der Anmeldung zur Seite
5. Wenn die Anmeldung fehlschlägt, kehren Sie zur aktuellen Ansicht zurück
2, Anmeldung überprüfen
1. Registrieren Sie die PostAuthenticateRequest-Ereignisfunktion in Global, um die vom Client gesendeten Cookie-Daten zu analysieren
1): Beurteilen Sie anhand von HttpContext.Current.User. Identität Ob der Benutzer angemeldet ist (FormsIdentity, IsAuthenticated, AuthenticationType)
2): Analysieren Sie den Wert aus dem Cookie der Anforderung des HttpContext, entschlüsseln Sie ihn, um das FormsAuthenticationTicket zu erhalten und die UserData-Rollenüberprüfung zu erhalten
2
1): Fügen Sie die Funktion „Autorisieren“ zur Aktion hinzu, eine Rollenüberprüfung kann durchgeführt werden
2): Führen Sie eine Rollenauthentifizierung in der IsInRole-Methode von HttpContext.Current.User durch (muss neu geschrieben werden)
1. Benutzeranmeldung
1. Web.config festlegen
Umleitungs-Anmeldeseite festlegen<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. Login Die mit „[Autorisieren]“ im Controller
bei der Verifizierung geänderte Methode verweigert die Anonymität.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); }
/// <summary> /// 对登录账号进行cookie /// </summary> /// <param name="model"></param> public void SetAuthCookie(Users loginModel) { //1、将对象转换成json var userdata = loginModel.ToJson(); //2、创建票据FormsAuthenticationTicket FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,"loginUser",DateTime.Now,DateTime.Now.AddDays(1), false, userdata); //对票据进行加密 var tickeEncrypt = FormsAuthentication.Encrypt(ticket); //创建Cookie,定义 HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, tickeEncrypt); cookie.HttpOnly = true; cookie.Secure = FormsAuthentication.RequireSSL; cookie.Domain = FormsAuthentication.CookieDomain; cookie.Path = FormsAuthentication.FormsCookiePath; cookie.Expires = DateTime.Now.Add(FormsAuthentication.Timeout); //先移除cookie,在添加cookie Response.Cookies.Remove(FormsAuthentication.FormsCookieName); Response.Cookies.Add(cookie); }
3. Modelldateien in Modelle hinzufügen
public class loginModels { /// <summary> /// 账号 /// </summary> [DisplayName("账号")] [Required(ErrorMessage = "账号不能为空")] public string AdminAccount { get; set; } /// <summary> /// 密码 /// </summary> [DisplayName("密码")] [Required(ErrorMessage = "密码不能为空")] public string AdminPwd { get; set; } }
4. Anmeldecode in Ansichten:
Code kopieren Der Code lautet wie folgt:
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
5. Globale Einstellungen
protected void Application_AuthenticateRequest(object sender, EventArgs e) { //1、通过sender获取http请求 // HttpApplication app = new HttpApplication();//实例化 HttpApplication app = sender as HttpApplication; //2、拿到http上下文 HttpContext context = app.Context; //3、根据FormsAuthe,来获取cookie var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie != null) { //获取cookie的值 var ticket = FormsAuthentication.Decrypt(cookie.Value); if (!string.IsNullOrWhiteSpace(ticket.UserData)) { //把一个字符串类别变成实体模型 var model = ticket.UserData.ToObject<AdmininfoViewModel>(); //var acount = model.AdminAccount; //获取账号 context.User = new MyFormsPrincipal<AdmininfoViewModel>(ticket, model); //MyFormsPrincipal.Identity = new FormsIdentity(ticket); // MyFormsPrincipal.userdata; } } }
6. Abmelden
Im Controller/// <summary> /// 退出登录 /// </summary> public ActionResult loginout() { //删除票据 FormsAuthentication.SignOut(); //清除cookie Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddDays(-1); Response.Cookies.Remove(FormsAuthentication.FormsCookieName); return RedirectToAction("Index", "Home"); }
Das obige ist der detaillierte Inhalt vonBeispiel für die Implementierung des Formularauthentifizierungs-Authentifizierungsprozesses in asp.net mvc. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!