MVC登陆验证操作流程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44539055/article/details/89913097

MVC登陆验证操作流程

下面我们来了解MVC登陆验证操作流程

首先我也先搭建一个登陆页面,页面内容包括用户帐号,密码,验证码,具体身份,等输入框,对输入内容传到控制器进行验证匹配。当用户点击登陆时进行验证,如果输入的身份和帐号,密码正确刚跳转到指定页面,否则判断是否进行输入或密码,帐号是否正确进行不同的提示
登陆页面代码就不写了自行搭建啦

以下面为例:
在这里插入图片描述

$(document).ready(function () {
            if (window.top.location.href != window.location.href) {
                window.top.location.href = window.location.href;
            }
        });
        var layer;
        $("body").keyup(function (e) {
            if (e.keyCode == 13) {
                $("#btnSubmit").click();
            }
        });加载layer模块使用到 Plugins/layui/layui.all.js插件
        $(function () {
           
            layui.use(['layer'], function () {
                layer = layui.layer;
            });
         当用户点击验证图片进行切换,让用户能找到清晰的验证码图片进行输入
            $("#ValidateCode").click(function () {
                $(this).prop("src", "/Main/ValidCode?t=" + new Date().getTime());
            })
            点击登录按钮进行页面数据提交到控制器进行判断
            $("#btnSubmit").click(function () {
               获取页面输入框的数据
                var UserNuber = $('#fmLogin [name="UserNuber"]').val();
                var password = $('#fmLogin [name="password"]').val();
                var validCode = $('#fmLogin [name="validCode"]').val();
                var UserTypeClass = $('#fmLogin [name="UserTypeClass"]').val();
                var rememberMe = $('#fmLogin [name="rememberMe"]').val();

            判断是否填写数据如果页面数据没填写完整则提示:

‘请把登录信息请填写完整"
如果填写了数据就传送到控制器进行判断,如果输入用户账号或密码错误则提示:“请输入正确的账号或密码“
如果是验证码错误则提示:“验证码错误“然后刷新验证码

   if (strValIsNotNull(UserNuber) && strValIsNotNull(password) && strValIsNotNull(validCode)) {
                //异步提交
                var layerIndex = layer.load();//开启layer加载层
                $.post("/Main/UserLogin", {
                    UserNuber: UserNuber,
                    password: password,
                    validCode: validCode,
                    UserTypeClass: UserTypeClass,
                    rememberMe: rememberMe,
                }, function (msg) {
                    layer.close(layerIndex);//关闭加载层
                    if (msg == 'success') {
                        //layer.alert("登录成功");
                        //登录成功,跳转到主页面
                        window.location.replace("/Main/Main");//使用replace不会出现后退按钮
                    }
                    else {
                        if (msg == "userTypeErro") {
                            layer.alert('请选择正确的用户类型');
                        }
                        else if (msg == "passwordErro") {
                            layer.alert('请输入正确的账号或密码');
                        }
                        else if (msg == "validCodeErro") {
                            layer.alert('请输入正确的验证码');
                        }
                        else if (msg == "userNoExsit") {
                            layer.alert('用户不存在');
                        }
                        else {
                            layer.alert('登录失败');
                        }
                        //清空密码和验证码
                        $("#password").val("");
                        $("#ValidateCode").val("");
                        //验证码刷新
                        $("#ValidateCode").click();
                    }
                });
            } else {
                layer.alert("登录信息请填写完整");
            }
        });
    });
    //字符串值不为空
    function strValIsNotNull(strVal) {
        return strVal != undefined && strVal != null && strVal != '';
    }

控制器重数据库中查询出数据进行对页面传过来的数据进行判断,这边接收视图传过来的数据,
读取浏览器请求传递的cookie,判断cookie是否存在然后数据页面数据回填

  public ActionResult Login()
        {
            string UserNuber = "";
            string Password = "";
            string UserTypeClass = "";
            bool isRember = false;
            //读取浏览器请求传递的cookie
            HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies["user"];
            if (cookie != null)//判断cookie是否存在
            {
                if (cookie["UserNuber"] != null)
                {
                    UserNuber = System.Web.HttpContext.Current.Server.UrlDecode(cookie["UserNuber"]);
                }
                if (cookie["Password"] != null)
                {
                    Password = System.Web.HttpContext.Current.Server.UrlDecode(cookie["Password"]);
                }
                if (cookie["UserTypeClass"] != null)
                {
                    UserTypeClass = System.Web.HttpContext.Current.Server.UrlDecode(cookie["UserTypeClass"]);
                }
                isRember = true;
            }
public ActionResult UserLogin(PW_User pwUser)
        {
            string strMsg = "fail";/ 
            string strUserNuber = pwUser.UserNuber;              //用户名
            string strPassword = pwUser.Password;           //密码
            string strValidCode = Request["validCode"];       //验证码
            string strIsRember = Request["rememberMe"];         //记住否        
            string strUserTypeClass = Request["UserTypeClass"];   //用户类型ID
            获取处session存放的验证码
            string sessionValiCode = "";
            try
            {
                sessionValiCode = Session["validCode"].ToString();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);//并不会产生输出,主要是为了避免VS提示e未使用的警告
                //throw;
            }
            //判断填入的验证和session中的验证码是否一致
            if (sessionValiCode.Equals(strValidCode.Trim(), StringComparison.InvariantCultureIgnoreCase))
            {
                try
                {
                  
                    */
                    PW_User dbUser = (from tbUser in myModel.PW_User
                                      where tbUser.UserNuber == pwUser.UserNuber.Trim() && tbUser.ToVoidNo == true
                                      select tbUser).Single();//单条数据据,当没有数据
                    string password = AESEncryptHelper.Encrypt(strPassword);
                    if (dbUser.Password == password)
                    {
                        strUserTypeClass = strUserTypeClass.Trim();//去空格
                        //多表查询--结合sql写法
                        //用户表 连 用户角色明细表 连 用户类型表
                        var listUserType = (from tbUser in myModel.PW_User
                                            join tbUserRoleDetail in myModel.PW_UserRoleDetail on tbUser.UserID equals tbUserRoleDetail.UserID
                                            join tbUserType in myModel.SYS_UserType on tbUserRoleDetail.UserTypeID equals tbUserType.UserTypeID
                                            where tbUser.UserID == dbUser.UserID && tbUserType.typeClass == strUserTypeClass
                                            select new
                                            {
                                                tbUserType.UserTypeID,
                                                tbUserType.UserType
                                            }).ToList();
                        if (listUserType.Count > 0)
                        {
                            //用户身份验证完成 开始处理登录信息

                            //获取用户类型名称
                            string userTypeName = listUserType[0].UserType.Trim();
                            //获取用户类型ID
                            int userTypeId = listUserType[0].UserTypeID;

                            //设置session
                            Session["UserID"] = dbUser.UserID; // 传递 UserID   
                            Session["UserTypeID"] = userTypeId;// 传递 UserTypeID  
                            Session["ServerTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ;//登录时间
                            Session["UserTypeClass"] = strUserTypeClass;//用户的类型 1-学生;2-教师;3-管理

                            //设置cookie
                            if (strIsRember == "true")
                            {
                                //记住密码 保存cookie
                                HttpCookie cookie = new HttpCookie("user");
                                cookie.Expires = DateTime.Now.AddDays(7);//保存7天
                                cookie["UserNuber"] = strUserNuber;//用户名
                                cookie["Password"] = strPassword;//密码
                                cookie["UserTypeClass"] = strUserTypeClass;//用户类型
                                Response.Cookies.Add(cookie);
                            }
                            else
                            {
                                //删除 cookie
                                HttpCookie cookie = new HttpCookie("user");
                                cookie.Expires = DateTime.Now.AddDays(-1);//通过设置 Cookie 的过期时间为负,强制使 Cookie 过期
                                Response.Cookies.Add(cookie);
                            }

                            strMsg = "success";//登录成功
                        }
                        else
                        {
                            strMsg = "userTypeErro";//用户类型错误
                        }
                    }
                    else
                    {
                        strMsg = "passwordErro";//密码错误
                    }
                }
                catch (Exception e)
                {
                    strMsg = "userNoExsit";//没有此用户
                    Console.WriteLine(e);
                    //throw;
                }
            }
            else
            {
                strMsg = "validCodeErro";//验证码错误
            }

            //返回
            return Json(strMsg, JsonRequestBehavior.AllowGet);
        }


        /// <summary>
        /// 登出
        /// </summary>
        /// <returns></returns>
        public ActionResult LoginOut()
        {
            //清空session
            Session.Clear();
            return Json(true, JsonRequestBehavior.AllowGet);
        }
    }
}
展开阅读全文

没有更多推荐了,返回首页