MVC与href登录跳转

问题:ajax跨域请求用户登录信息,返回用户信息,跳转不到目标页。 

 

由于使用MVC框架页面加载时先到controller中找到启动项,return view()后登录页加载,点击“登录”从服务器得到用户信息。若不经过验证直接重定向跳转不到目标页,对应链接:http://localhost:6422/Index/Login2?ReturnUrl=%2fUserMgmt%2fUserAuthorityMgmt%3fisAdmin%3d1&isAdmin=1

 

经过验证,MVC对用户登录信息需要[AllowAnonymous] 、FormsAuthenticationTicket认证,并记住在Cookie中。对应链接为:http://localhost:6422/UserMgmt/UserAuthorityMgmt?isAdmin=1

 

正确做法示例:(注意JS异步请求)

1)先从服务器请求用户信息

function login() {

            var id = $("#username").val();
            var pass = $("#password").val();
            var M = {};

            if (id == "" || null) {
                MsgHint(M, "账号不能为空!")
                return;
            }
            else if (pass == "" || null) {
                MsgHint(M, "请输入密码!")
                return;
            }
            else {
                var isAdmin = "0";
                var postData = { action: "WebAccountLogin", UserId: id, PassWord: pass };

                $.ajax({
                    type: "POST",
                    url: "http://xxx.xxx.xxx.xxx:8050//EntranceService.svc/postData?token= ",
                    data: JSON.stringify(postData),
                    dataType: "text",
                    success: function (data) {
                        var result = JSON.parse(data);
                        var M1 = {};

                        if (result.status == 0) {

                            isAdmin = result.value.Islogin;
                           
userAuthentic(isAdmin,id,pass,name);   //注意ajax异步执行,顺序

                        }
                        else {
                            MsgHint(M1, "用户名或密码错误,请重新输入!");
                        }
                    },
                    error: function () { alert("输入异常,请重新输入!") }
                });
                
            }
        }

(2)请求后台用户信息验证——MVC  FormsAuthentication验证并记录Cookie

function userAuthentic(isAdmin, id, pass, name) {
            $.ajax({
                type: "POST",
                url: "/Index/
UserAuthentic/",
                data: {
                    ID: id,
                    Pass: pass,
                    userName: "Miss Wang"
                },
                dataType: "text",
                success: function (data) {
                    if (data == "OK") {

                        window.location.href = "/UserMgmt/UserAuthorityMgmt?isAdmin=" + isAdmin;

                    }
                    else {
                        alert("输入异常,请重新输入!");
                        $("#username").val("");
                        $("#password").val("");
                    }
                },
                error: function () { alert("输入异常,请重新输入!") }, //错误提示  

            });
        }

3)后台对用户信息验证

       [AllowAnonymous]
        public string UserAuthentic()
        {

            string userID = Request.Form["ID"];   //账号:用户名或电话号码
            string pass = MD5.Md5Hash(Request.Form["Pass"].ToString());
            string userName = Request.Form["userName"];

            try {
                if (!string.IsNullOrEmpty(userName))
                {
                    HttpCookie hc = new HttpCookie("User");
                    hc.Values.Add("UserID", userID);
                    hc.Values.Add("UserName", Url.Encode(userName));
                   
Response.Cookies.Add(hc);       //cookie记录用户信息

                    Session.Add("userId", userID);                                //满足日志记录使用
                    bool cookiePer = true;

                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket           //数据经过加密,前台无法直接从cookie中获取
                        (1,               // 票证的版本号。

                            userID,    // 与票证关联的用户名。
                            DateTime.Now,              //票证发出时的本地日期和时间。
                            DateTime.Now.AddDays(1),  //票证过期时的本地日期和时间。
                            cookiePer,            //如果票证将存储在持久性 Cookie 中(跨浏览器会话保存),则为 true;否则为 false。
                            "",                           //存储在票证中的用户特定的数据。
                          
  "/"                  //票证存储在 Cookie 中时的路径。
                        );
                    var
cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                    cookie.HttpOnly = true;
                   
 HttpContext.Response.Cookies.Add(cookie);

                    return "OK";
                }
                else {
                    return "error";
                }
                
            }
            catch(Exception ex) {
                LogToDB.Fatal(ex);
                return "exception";
            }
            
        }

 

猜你喜欢

转载自blog.csdn.net/wang_NiFeng/article/details/80559941