Exemple #1
0
        /// <summary>
        /// 用户点击重新扫码之后原二维码失效
        /// </summary>
        /// <param name="Sceneid"></param>
        public void AuthorizedDelete(string Sceneid)
        {
            UserLoginSceneid Log = Entity.UserLoginSceneid.FirstOrDefault(n => n.Sceneid == Sceneid);

            if (Log != null)
            {
                Entity.UserLoginSceneid.DeleteObject(Log);
                Entity.SaveChanges();
            }
        }
Exemple #2
0
        /// <summary>
        /// 验证授权并返回结果
        /// </summary>
        /// <param name="Sceneid">登录授权码</param>
        public void AuthorizedResult(string Sceneid)
        {
            UserLoginSceneid Log = Entity.UserLoginSceneid.FirstOrDefault(n => n.Sceneid == Sceneid);

            if (Log == null)
            {
                Response.Write("E0");
                return;
            }
            if (Log.AddTime.AddMinutes(5) < DateTime.Now)//失效
            {
                Response.Write("E0");
                return;
            }
            if (Log.UId.IsNullOrEmpty())        //未登录
            {
                if (!Log.Token.IsNullOrEmpty()) //已扫码
                {
                    Response.Write("E8");
                    return;
                }
                else
                {
                    Response.Write("E9");
                    return;
                }
            }
            Users BaseUsers = Entity.Users.FirstOrDefault(n => n.Id == Log.UId);

            if (BaseUsers == null)
            {
                Response.Write("E1");
                return;
            }
            //清除扫码记录cookie,删除临时保存的数据库二维码参数
            Entity.DeleteObject(Log);
            Entity.SaveChanges();
            //返回用户信息
            BaseUsers.Cols = "TrueName,UserName,CardStae,CardId";
            string json          = "{\"UserName\":\"" + BaseUsers.UserName + "\",\"CardStae\":\"" + BaseUsers.CardStae + "\",\"CardId\":\"" + BaseUsers.CardId + "\",\"TrueName\":\"" + BaseUsers.TrueName + "\"}";
            string AuthorizedKey = ConfigurationManager.AppSettings["AuthorizedKey"].ToString();

            json = LokFuEncode.LokFuAPIEncode(json, AuthorizedKey);
            Response.Write(json);
        }
        //方式1:普通长轮询 Ajax方式,服务端运用System.Threading.Thread,客户端运用无限Ajax请求
        //巨大缺点:采用Thread hold住程序会严重占用资源,影响处理请求并发。
        //方式2:ajax长连接,服务端无Thread,客户端Ajax采用timeout,隔时无限加载。
        //缺点:产生很多无效请求,包含过多的http头部信息,增加数据量。
        public void GetQrCodeLogin(string Sceneid)
        {
            UserLoginSceneid Log = Entity.UserLoginSceneid.FirstOrNew(n => n.Sceneid == Sceneid);

            if (Log.AddTime.AddMinutes(5) < DateTime.Now)//失效
            {
                Response.Cookies.SetQRCodeSceneid(string.Empty);
                Response.Write("E0");
                return;
            }
            if (Log.UId.IsNullOrEmpty())        //未登录
            {
                if (!Log.Token.IsNullOrEmpty()) //已扫码
                {
                    Response.Write("E8");
                    return;
                }
                else
                {
                    Response.Write("E9");
                    return;
                }
            }
            Users BaseUsers = Entity.Users.FirstOrNew(n => n.Id == Log.UId);

            if (BaseUsers.Id.IsNullOrEmpty())
            {
                Response.Write("E1");
                return;
            }
            string neiw = System.Configuration.ConfigurationManager.AppSettings["key"].ToString();
            string UserNameAndPassWord = LokFuEncode.LokFuAuthcodeEncode(string.Format("{0}|{1}|{2}", BaseUsers.Id, BaseUsers.UserName, BaseUsers.PassWord), neiw);

            Response.Cookies.SetUsers(UserNameAndPassWord);
            BaseUsers.LoginErr = 0;
            Entity.SaveChanges();
            //清除扫码记录cookie,删除临时保存的数据库二维码参数
            Response.Cookies.SetQRCodeSceneid(string.Empty);
            Entity.DeleteObject(Log);
            Entity.SaveChanges();
            Response.Write("OK");
            Response.End();
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[QRCodeLogin]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            UserLoginSceneid UserLoginSceneid = new UserLoginSceneid();

            UserLoginSceneid = JsonToObject.ConvertJsonToModel(UserLoginSceneid, json);
            if (UserLoginSceneid.Sceneid.IsNullOrEmpty() || UserLoginSceneid.Token.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == UserLoginSceneid.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }

            UserLoginSceneid SLS = Entity.UserLoginSceneid.FirstOrDefault(n => n.Sceneid == UserLoginSceneid.Sceneid);

            if (SLS == null)
            {//不存在
                DataObj.OutError("2040");
                return;
            }
            if (!SLS.UId.IsNullOrEmpty())
            {//已使用
                DataObj.OutError("2040");
                return;
            }
            if (SLS.AddTime.AddMinutes(5) < DateTime.Now)
            {//超时
                DataObj.OutError("2040");
                return;
            }
            if (!SLS.UId.IsNullOrEmpty())//已使用
            {
                DataObj.OutError("2040");
                return;
            }
            if (SLS.Token != UserLoginSceneid.Token)
            {//被别人扫过
                DataObj.OutError("2040");
                return;
            }
            SLS.UId       = baseUsers.Id;
            SLS.LoginTime = DateTime.Now;

            Entity.SaveChanges();
            DataObj.Data = "";
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Exemple #5
0
        /// <summary>
        /// 生成授权码
        /// </summary>
        public void CreateAuthorizedCode()
        {
            string Sceneid = "000000"; string QRCodePicUrl = string.Empty;
            //删除过期随机参数记录
            DateTime Ptime = DateTime.Now.AddSeconds(-600);
            List <UserLoginSceneid> List = Entity.UserLoginSceneid.Where(n => n.AddTime < Ptime).ToList();

            foreach (var p in List)
            {
                Entity.DeleteObject(p);
            }
            if (List.Count() > 0)
            {
                Entity.SaveChanges();
            }
            //生成并保存随机参数
            int rid = new Random().Next(100001, Int32.MaxValue);

            Sceneid = rid.ToString();
            while (Entity.UserLoginSceneid.Count(n => n.Sceneid == Sceneid) != 0)
            {
                rid     = new Random().Next(100001, Int32.MaxValue);
                Sceneid = rid.ToString();
            }
            QRCodePicUrl = "/UpLoadFiles/UserLoginSceneid/" + Sceneid + ".gif";
            string webFilePath = Server.MapPath(string.Format(QRCodePicUrl));        //服务器端文件路径

            if (!System.IO.File.Exists(webFilePath))
            {
                QRCodeEncoder Encoder = new QRCodeEncoder();
                Encoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;   //二维码编码方式
                Encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //纠错码等级
                Encoder.QRCodeScale        = 5;                                //每个小方格的宽度
                Encoder.QRCodeVersion      = 5;                                //二维码版本号

                int AgentId = Utils.GetAgentIdByDomain();
                if (!AgentId.IsNullOrEmpty())
                {
                    SysAgent SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == AgentId);
                    if (SysAgent.Tier != 1)
                    {
                        AgentId = 0;
                    }
                    if (SysAgent.IsTeiPai == 0)
                    {
                        AgentId = 0;
                    }
                }
                //动态调整二维码版本号,上限40,过长返回空白图片,编码后字符最大字节长度2953
                string URL   = string.Format("{0}/mobile/down/index-{2}.html#hfQCL{1}", SysPath, Sceneid, AgentId);
                Bitmap image = Encoder.Encode(URL, Encoding.UTF8);
                image.Save(webFilePath, ImageFormat.Gif);
            }
            UserLoginSceneid UserLoginSceneid = new UserLoginSceneid();

            UserLoginSceneid.UId     = 0;
            UserLoginSceneid.AddTime = DateTime.Now;
            UserLoginSceneid.Sceneid = Sceneid;
            UserLoginSceneid.Pic     = Sceneid + ".gif";
            Entity.UserLoginSceneid.AddObject(UserLoginSceneid);
            Entity.SaveChanges();

            Response.Write(QRCodePicUrl);
        }