MVC下的表单登录验证方式

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. 本篇文章最好结合上一篇文章对比去学习。

上一篇文章里有详细的参数及概念的讲解,本文为实际操作为主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值