/// <summary> /// 用户注销操作 /// </summary> /// <param name="context"></param> /// <returns></returns> public string Logout(HttpContext context) { OperatorModel op = OperatorProvider.Provider.GetCurrent(); //日志输出的对象,注销前先构造好,注销完成后,直接输入到日志 BaseSysLogModel sysLog = new BaseSysLogModel(); sysLog.F_System = Configs.GetSetting("systemFlag"); sysLog.F_Module = "登录注销"; sysLog.F_OptType = "注销"; sysLog.F_OptContent = string.Format("用户{0}({1})注销系统。", op.UserName, op.UserCode); sysLog.F_CreateUserId = op.UserId; //删除掉当前session的登录记录信息 string providerMsg = OperatorProvider.RemoveFromAllProvider(); //删除掉当前session缓存的信息 OperatorProvider.Provider.RemoveCurrent(); if (!OperatorProvider.AllProvider.ContainsValue(providerMsg)) //该帐号注销后,检测是否还有该值得信息存在 { userLoginBll.LogoutUpdate(op.LoginToken); } //记录注销登录日志 SysLogProvider.GetInstance().WirteSysLog(sysLog); return(SuccessResult("注销成功!")); }
/// <summary> /// 将日志写入到数据库的方法 /// </summary> /// <param name="sysLogModel">系统传过来的日志信息</param> /// <returns></returns> public bool AddSysLog(BaseSysLogModel sysLogModel) { LogsModel model = sysLogModel.Copy<LogsModel>(); var loginInfo = OperatorProvider.Provider.GetCurrent(); if (loginInfo != null) { model.F_IPAddress = loginInfo.LoginIpAddress; model.F_IPCity = loginInfo.LoginIpAddressName; } return logsDal.AddForm(model); }
/// <summary> /// 验证用户名密码,并检测是否运行登录。 /// </summary> /// <param name="context"></param> /// <returns></returns> public string CheckLogin(HttpContext context) { string account = context.Request["account"]; string password = context.Request["password"]; string verify = context.Request["verifyCode"]; string forceLogin = context.Request["forceLogin"] ?? "false"; //1、对验证码进行校验。 if (!VerifyCode.Verify.CheckVerifyCode(verify)) { return(ErrorResult(JsonRpcErrorEnum.BusinessError, "验证码错误。")); } //2、校验IP登录限制信息 string thisIp = NetHelper.GetClientIp(); //TODO 这里Ip限制待实现 // FilterIPApp filterIpApp = new FilterIPApp(); // if (!filterIpApp.CheckIpIsEnable(thisIp)) // { // throw new Exception("当前用户IP被禁止登录,请联系管理员。"); // } //3、获取用户信息。 UserModel user = userBll.GetUserByAccount(account); if (user == null) { return(ErrorResult(JsonRpcErrorEnum.BusinessError, "用户不存在!")); } if (user.F_DeleteFlag == 1) { return(ErrorResult(JsonRpcErrorEnum.BusinessError, "该用户已被删除!")); } //4、验证用户登录信息。 UserLoginModel userLogin = userLoginBll.CheckLogin(user.F_Id, password); if (userLogin == null) { return(ErrorResult(JsonRpcErrorEnum.BusinessError, "用户登录验证失败,请重试!")); } //5、 单用户登录验证 #region 单用户登录验证 string allProviderValue = user.F_Id + "|" + userLogin.F_Id; //全局的用户信息缓存的内容 if (userLogin.F_MultiUserLogin == 0) { List <string> nowSessionIds = OperatorProvider.AllProvider .Where(t => t.Value == allProviderValue) .Select(t => t.Key).ToList(); if (nowSessionIds.Any()) { if (forceLogin == "false") { //如果已经登陆,则提示已经登陆,是否强制登录。 return(SuccessResult("hasLogin")); } //如果强制登录,则直接将其他登录用户修改为以下线状态 foreach (string nowSessionId in nowSessionIds) { MyLog.Debug(nowSessionId + "设置为强制下线"); OperatorProvider.AllProvider[nowSessionId] = "logout"; } } } #endregion //6、用户登录成功后,将登录的最新信息更新到数据库 userLoginBll.LoginUpdate(userLogin); //7、缓存当前操作用户信息 #region 缓存当前操作用户信息 OperatorModel op = new OperatorModel(); op.UserId = user.F_Id; op.UserCode = user.F_Account; //帐号 op.UserName = user.F_NickName; //昵称 op.UserPhoto = user.F_HeadIcon; //头像 op.CompanyId = user.F_OrganizeId; //组织架构 op.DepartmentId = user.F_DepartmentId; //部门 op.RoleId = user.F_RoleId; //岗位 op.LoginIpAddress = thisIp; op.LoginIpAddressName = NetHelper.GetLocation(thisIp); //operate.LoginToken = DESEncrypt.Encrypt(Guid.NewGuid().ToString()); op.LoginToken = userLogin.F_Id; op.LoginTime = DateTime.Now; op.IsSystem = Convert.ToBoolean(user.F_IsAdmin); //是否是管理员 //这里判定是否是初始密码实现方案有两个: //1、 根据配置的默认密码与当前密码进行对比,进行提醒。但是如果配置修改后,对于之前的密码无法做到有效检测。 //2、 根据密码修改的时间进行判定,如果密码修改时间不存在,则认为是未进行修改。此处采用这种。 op.IsDefaultPwd = userLogin.F_ChangePassTime == null; OperatorProvider.Provider.AddCurrent(op); #endregion //8、将登陆信息缓存到整体变量中 OperatorProvider.AddToAllProvider(allProviderValue); //9、记录系统登录日志 BaseSysLogModel sysLog = new BaseSysLogModel(); sysLog.F_System = Configs.GetSetting("systemFlag"); sysLog.F_Module = "登录注销"; sysLog.F_OptType = "登录"; sysLog.F_OptContent = string.Format("用户{0}({1})登录系统。", op.UserName, op.UserCode); SysLogProvider.GetInstance().WirteSysLog(sysLog); return(SuccessResult("true")); }