.net实现api实现用户登录注册过滤器判断过滤

表 (api实现用户登录注册过滤器判断过滤)

customer 》》 user

customeruser
顾客用户

表间关系

user----customer(1对1)

用户表(user)
IDNamePasswordRoleIDCustomerIDToken
主键用户名(手机号)密码(MD5加密)所属权限对应顾客判断登录属性

顾客表

IDPhoneNicknameAvatarSex
主键手机号昵称(随机生成)头像随机从数据库获取性别

业务流程

1. 用户注册自动生成用户信息(customer信息)向user表插入用户名(phone)密码

(password)

2. 在用户表插入token(自动生成 用户名+时间戳(发令时间))

3. 自动生成customer的一些参数如用户昵称(随机生成)用户头像

(随机从数据库获取)

电话(从用户表获取)

4.用户再次登录时要重新生成token

过滤器

1.首先app在头文件里要有对应的值如uid,token

2.在过滤器里要判断访问控制器和action是否是登录或注册是就不去判断请求头信息

否判断

 string controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName;
            //得到action名
            string actionName = actionContext.ActionDescriptor.ActionName;
            //如果是用户登陆注册不跳页面
            if (controllerName == "User" && (actionName == "Regist" || actionName == "Login"))
            {
                base.OnActionExecuting(actionContext);
                return;
            }




3.如果不是就去判断响应头的内容看是否为空并且去数据库匹配token是否正确,

正确通过,

不正确返回错误信息

 
 //获取Headers中是否包含uid和token如果包含则返回
            bool isHaveUid = actionContext.Request.Headers.Contains("uid");
            bool isHaveToken = actionContext.Request.Headers.Contains("token");
            //bool isHaveSignature = actionContext.Request.Headers.Contains("signature");


            if (isHaveUid && isHaveToken)
            {
                //得到签名
               // string signature = actionContext.Request.Headers.GetValues("signature").ToList()[0];
                //得到表头uid的值
                string uid = actionContext.Request.Headers.GetValues("uid").ToList()[0];
                //得到表头token的值
                string token = actionContext.Request.Headers.GetValues("token").ToList()[0];
                int _uid;
                bool resuit = int.TryParse(uid, out _uid);
                if (!resuit)
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK,
 new { isLogin = false, mgs = "请求uid参数格式有误!" });
                    return;
                }
                List<User> users = bll.Search(x => x.ID == _uid);
                if (users.Count==0)
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK,
 new { isLogin = false, mgs = "用户uid有误!" });
                    return;
                }
                User user = users[0];
                //Token是否相同
                if (user.Token != token)
                {
                    //结束请求返回类(json)
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, 
new { isLogin = false, mgs = "token错误!" });
                    return;
                }
                判断签名是否一致    
                //if (signatureCreate(user.Name, user.Password) != signature)
                //{
                //    // 结束请求返回类(json)
                //    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, 
new { isLogin = false, mgs = "signature错误!" });
                //    return;
                //}
            }
            else
            {
                //结束请求返回类(json)
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, 
new { isLogin = false, mgs = "缺少必要的参数!" });
                return;
            }
            //全部正确执行
            base.OnActionExecuting(actionContext);
        }

4.注意事项

   //得到controller 的名
  string controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName; 
     //得到action名         
    string actionName = actionContext.ActionDescriptor.ActionName;       
     //获取Headers中是否包含uid和token如果包含则返回       
     bool isHaveUid = actionContext.Request.Headers.Contains("uid");       
     bool isHaveToken = actionContext.Request.Headers.Contains("token");      
     //得到表头uid的值          
     string uid = actionContext.Request.Headers.GetValues("uid").ToList()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值