您的位置:首页 > 其它

MVC下的表单登录验证方式

2014-06-18 14:59 295 查看
1、View:获取用户登录数据

2、  对应的Controller中:

      public ActionResult AjaxAuthorizeUser(string tel, string num, string innum)

        {

            var telephone = tel ?? "";

            var numbers = num ?? "";

            var innumbers = innum ?? "";

            ViewBag.txtNum = numbers;

            ViewBag.txtTel = telephone;

            var success = false;

            if (tel != "" && numbers != "" && innumbers != "")

            {

                if (innumbers == numbers)

                {

                    var datenow = DateTime.Now;

                    var datexpires = datenow.AddDays(1);

                    //查看是否有该用户

                    var user = UserDal.F_User_GetMemberInforByTel(tel);

                    //某有则去创建

                    if (user == null)

                    {

                        int isCreate = UserDal.F_User_CreateClient_ByTel(tel);

                        user = UserDal.F_User_GetMemberInforByTel(tel);

                    }

                    //获取相关用户信息,保存至cookie中

                    //1、生成票据

                    var ticket = new FormsAuthenticationTicket(

                        1,

                        user.Id.ToString(CultureInfo.InvariantCulture) + ":" + user.ClientName,

                        datenow,

                        datexpires,

                        false,

                       // user.RoleName.ToString(CultureInfo.InvariantCulture)

                        "clients"              /*这里用上面准备好的用逗号分割的role字符串,此处简化为已client为例,

                                               使用时仅需在相关页面上添加 [Authorize(Roles = "clients")] 即可*/

                        );

                    //2、加密票据并生成Cookie

                    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket))

                    {

                        Expires = datexpires

                    };

                    //3、将身份验证票据Cookie输出到客户端

                    Response.Cookies.Add(cookie);

                    success = true;

                }

            }

            return Content(JsonConvert.SerializeObject(new

            {

                return_code = 0,

                success

            }));

            

        }

3、web.config文件中:

   <authentication mode="Forms">

      <forms loginUrl="~/Account/Login" timeout="2880" />

    </authentication>

4、Global.asax中:

 protected void Application_AuthorizeRequest(object sender, System.EventArgs e)

        {

            HttpApplication App = (HttpApplication)sender;

            HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象

            if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理

            {

                FormsIdentity Id = (FormsIdentity)Ctx.User.Identity;

                FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票

                string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组

                Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息

            }

        }

或者

protected void Application_AuthenticateRequest(Object sender, EventArgs e)

        {

            HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];

            if (authCookie == null || authCookie.Value == "")

            {

                return;

            }

            FormsAuthenticationTicket authTicket = null;

            try

            {

                authTicket = FormsAuthentication.Decrypt(authCookie.Value);

            }

            catch

            {

                return;

            }

            string[] roles = authTicket.UserData.Split(new char[] { ';' });

            if (Context.User != null)

            {

                Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);

            }

        }  均可。

P.S. 本篇文章最好结合上一篇文章对比去学习。

上一篇文章里有详细的参数及概念的讲解,本文为实际操作为主。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  表单 mvc cookies