/// <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(); } }
/// <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(); }
/// <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); }