Maison >développement back-end >Tutoriel C#.Net >Exemple d'implémentation du processus d'authentification par formulaires dans asp.net mvc
Cet article présente principalement le processus d'authentification par formulaires dans asp.net MVC. L'éditeur pense qu'il est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour jeter un œil
Processus de vérification
Connexion de l'utilisateur
1. Formulaire : ModelState.IsValid
2. Vérifiez le nom d'utilisateur et le mot de passe : Vérifiez en interrogeant la base de données
3 Si le nom d'utilisateur et le mot de passe sont corrects, enregistrez le cookie sur le client pour enregistrer l'état de connexion de l'utilisateur : SetAuthCookie
. 1) : Recherchez le nom d'utilisateur et certaines informations nécessaires dans la base de données, puis enregistrez les informations supplémentaires dans UserData
2) : Enregistrez le nom d'utilisateur et les données utilisateur dans le ticket FormsAuthenticationTicket
3) : Chiffrez le ticket Chiffrez
4) : Enregistrez le ticket crypté dans Cookie et envoyez-le au client
4. Accédez à la page avant de vous connecter
5 Si la connexion échoue, revenez à la vue actuelle
<.>2, Vérifiez la connexion
1) : Jugez par HttpContext.Current.User. Identité Si l'utilisateur est connecté (FormsIdentity, IsAuthenticated, AuthenticationType)
2) : Analysez la valeur du cookie de la requête du HttpContext, déchiffrez-la pour obtenir le FormsAuthenticationTicket et obtenez la vérification du rôle UserData
2.
1) : Ajoutez la fonctionnalité Authorize à l'Action, la vérification du rôle peut être effectuée
2) : Effectuez l'authentification du rôle dans la méthode IsInRole de HttpContext.Current.User (doit être réécrit)
1. Connexion de l'utilisateur
1. Définir web.config
Définir la page de connexion de redirection<system.web> <authentication mode="Forms"> <forms name="loginName" loginUrl="/UserInfo/login" cookieless="UseCookies" path="/" protection="All" timeout="30"></forms> </authentication> </system.web>Commenter
<modules> <!--<remove name="FormsAuthentication" />--> </modules>
2. Connexion La méthode modifiée avec "[Authorize]" dans le contrôleur
lors de la vérification refuse l'anonymat.public class UserInfoController : Controller //控制器 { //身份验证过滤器 [Authorize] public ActionResult Index() { return View(); } }Connectez-vous au contrôleur
/// <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); }Cookiez le compte de connexion
/// <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.Ajoutez des fichiers de modèle dans Modèles
public class loginModels { /// <summary> /// 账号 /// </summary> [DisplayName("账号")] [Required(ErrorMessage = "账号不能为空")] public string AdminAccount { get; set; } /// <summary> /// 密码 /// </summary> [DisplayName("密码")] [Required(ErrorMessage = "密码不能为空")] public string AdminPwd { get; set; } }
4. Code de connexion dans Views :
Copier le code Le code est le suivant :
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
5. Paramètres globaux
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. Déconnexion
Dans le contrôleur/// <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"); }Afficher le lien de saut
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!