Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="user"></param>
        public static void AddLoginLog(SysUser user)
        {
            var log = new SysLoginLog();

            log.LoginTime  = DateTime.Now;
            log.LogoutTime = DateTime.Now.AddMinutes(2);
            //log.OtherInfo = GetRequestParams(HttpContext.Current.Request);
            log.TenantId = user.TenantId;
            log.UserId   = user.UserId;
            log.ClientIp = WebClient.GetClientIp();
            _dataAccess.AddEntity(log);
            HttpContext.Current.Session["login-logId"] = log.LogId;
        }
Example #2
0
        public int Add(SysLoginLog model)
        {
            int result;

            try
            {
                db.SysLoginLog.Add(model);
                result = db.SaveChanges();
            }
            catch (Exception ex)
            {
                result = 0;
                LogUtil.Exception("ExceptionLogger", ex);
            }
            return(result);
        }
Example #3
0
 /// <summary>
 /// 记录登陆日志
 /// </summary>
 /// <param name="log"></param>
 public void EmitLog(SysLoginLog log)
 {
     if (log != null)
     {
         log.Enabled    = 1;
         log.DelDate    = null;
         log.LogOutDate = null;
         ServiceProvider provider = new ServiceProvider();
         provider.RegisterService <SysLoginLogService>(true);
         using (var service = provider.GetService <SysLoginLogService>())
         {
             LogHelper.WriteInfoLog($"login info:{JsonHelper.SerializeObject(log)}");
             service.Add(log);
         }
     }
 }
Example #4
0
        public async Task <JsonResult> SignOut()
        {
            AuthorizationUser user = AuthenticationHelper.Current();

            if (user != null)
            {
                SysLoginLog log = _sysLoginLogService.FindEntity(user.LoginId);
                if (log != null)
                {
                    log.SignOutTime = DateTime.Now;
                    TimeSpan ts = log.SignOutTime.Value - log.LoginTime;
                    log.StandingTime = ts.TotalMinutes;
                    await _sysLoginLogService.UpdateAsync(log);
                }
            }
            await AuthenticationHelper.SignOut();

            return(Json(new OperateResult("退出成功", ResultStatus.SignOut)));
        }
Example #5
0
        /// <summary>
        /// 刷新在线时间
        /// </summary>
        public static void SetAlive()
        {
            var session = new SessionManager.SessionExt(HttpContext.Current);

            if (!session.Exists("login-logId"))
            {
                return;
            }
            lock (lkhelp)
            {
                var exec  = false;//是否需要执行数据库更新操作
                var logId = (int)session["login-logId"];
                if (lastUpDateTimes.ContainsKey(logId))
                {
                    var lastTime = lastUpDateTimes[logId];
                    if ((DateTime.Now - lastTime).TotalMinutes >= 1)
                    {
                        exec = true;
                        lastUpDateTimes[logId] = DateTime.Now;
                    }
                }
                else
                {
                    lastUpDateTimes.Add(logId, DateTime.Now);
                    exec = true;
                }
                if (exec)
                {
                    SysLoginLog log = _dataAccess.Get <SysLoginLog>(logId);
                    if (log == null)
                    {
                        return;
                    }
                    log.LogoutTime = DateTime.Now;
                    _dataAccess.UpdateField("Sys_LoginLog", "LogoutTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                            "Sys_LoginLog.LogId=" + logId);
                }
            }
        }
Example #6
0
        public ResponseResult <CurrentUserModel> SignIn(LoginModel model)
        {
            try
            {
                if (ApiCacheDic.Get(ApiCacheDic.RedirectUri) == null)
                {
                    var u = Request.RequestUri.GetLeftPart(UriPartial.Authority);
                    ApiCacheDic.Add(ApiCacheDic.RedirectUri, u, DateTime.Now.AddYears(1));
                }

                LogHelper.WriteInfoLog("SignIn....");

                #region 参数验证

                if (string.IsNullOrEmpty(model.LoginName))
                {
                    return(ResponseResult <CurrentUserModel> .GenFaildResponse(ResultCode.UsernameIsNull));
                }
                if (string.IsNullOrEmpty(model.Password))
                {
                    return(ResponseResult <CurrentUserModel> .GenFaildResponse(ResultCode.PasswordIsNull));
                }
                #endregion

                HttpRequestBase request = Context.Request;

                ExploreHelper eh = new ExploreHelper(request);

                SysLoginLog logEntity = new SysLoginLog
                {
                    ClientIpAddress = eh.ClientIP,
                    ClientName      = eh.ClientMachineName,
                    Enabled         = 1,
                    LogDate         = DateTime.Now
                };
                //登录日志
                try
                {
                    logEntity.IPNum = (int)StringHelper.IPToInt(eh.ClientIP);
                }
                catch
                {
                    logEntity.IPNum = 0;
                }

                ResultCode code    = ResultCode.Success;
                var        service = GetService <SysUserService>();
                var        data    = service.Login(model.LoginName, model.Password);
                if (data != null)
                {
                    var token = new SysLoginTokenModel(data.UserDepId, data.Id)
                    {
                        UserId = data.Id
                    };

                    var services = GetService <SysLoginTokenService>();
                    services.Add(new SysLoginToken()
                    {
                        UserId          = data.Id,
                        CustomerUser    = data.UserType,
                        CustomerId      = data.UserCustomerId,
                        Token           = token.Token,
                        InDate          = token.InDate,
                        ExpriedTime     = token.ExpriedTime,
                        AccessChannelId = 0,
                    });

                    var currentUserModel = new CurrentUserModel
                    {
                        LoginName      = model.LoginName,
                        UserId         = data.Id,
                        UserIsFreeze   = data.UserIsFreeze ? 0 : 1,
                        UserIsManage   = data.UserIsManage,
                        UserName       = data.UserName,
                        UserPosition   = data.UserPosition,
                        UserCustomerId = data.UserCustomerId,
                        Token          = token.Token
                    };

                    logEntity.UserId   = currentUserModel.UserId;
                    logEntity.Token    = token.Token;
                    logEntity.UserName = currentUserModel.UserName;
                    logEntity.LogDate  = System.DateTime.Now;


                    if (data.DelState == 1 || data.DepDelState == 1 || data.CompanyDelState == 1)
                    {
                        code = ResultCode.UserDeleted;

                        logEntity.IsSucceed = 0;
                        logEntity.LogReason = "用户已被删除";

                        WriteLoginLog.WriteLogLogin(logEntity);//写入登录日志
                    }
                    else if (data.Enabled == 0)
                    {
                        logEntity.IsSucceed = 0;
                        logEntity.LogReason = "用户已被冻结";

                        WriteLoginLog.WriteLogLogin(logEntity);//写入登录日志
                    }
                    else
                    {
                        SignInByIdentity(data, token);
                        code = ResultCode.Success;
                        WriteLoginLog.WriteLogLogin(logEntity);//写入登录日志
                    }
                    return(ResponseResult <CurrentUserModel> .GenSuccessResponse(currentUserModel));
                }
                else
                {
                    code = ResultCode.UserWrongPassword;
                    logEntity.InUserType = 1;
                    logEntity.IsSucceed  = 0;
                    logEntity.LogReason  = "用户不存在或者密码错误";
                    WriteLoginLog.WriteLogLogin(logEntity);//写入登录日志
                    return(ResponseResult <CurrentUserModel> .GenFaildResponse(code));
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(HttpContext.Current.Request.RawUrl, ex);
                return(ResponseResult <CurrentUserModel> .GenSuccessResponse(ex.Message));
            }
        }
Example #7
0
        public async Task <UserValidateDto> Login(UserValidateInputDto inputDto)
        {
            var user = await _userRepository.FetchAsync(x => new { x.Password, x.Salt, x.Name, x.Email, x.RoleId, x.Account, x.ID, x.Status }, x => x.Account == inputDto.Account);

            var log = new SysLoginLog()
            {
                ID              = new Snowflake(1, 1).NextId(),
                Account         = inputDto.Account,
                CreateTime      = DateTime.Now,
                Device          = "web",
                RemoteIpAddress = _userContext.RemoteIpAddress,
                Message         = string.Empty,
                Succeed         = false,
                UserId          = user?.ID,
                UserName        = user?.Name,
            };

            if (user == null)
            {
                var errorModel = new ErrorModel(ErrorCode.NotFound, "用户名或密码错误");
                log.Message = JsonConvert.SerializeObject(errorModel);

                throw new BusinessException(errorModel);
            }
            else
            {
                if (user.Status != 1)
                {
                    var errorModel = new ErrorModel(ErrorCode.TooManyRequests, "账号已锁定");
                    log.Message = JsonConvert.SerializeObject(errorModel);
                    await _loginLogRepository.InsertAsync(log);

                    throw new BusinessException(errorModel);
                }

                var logins = await _loginLogRepository.SelectAsync(5, x => new { x.ID, x.Succeed, x.CreateTime }, x => x.UserId == user.ID, x => x.ID, false);

                var failLoginCount = logins.Count(x => x.Succeed == false);

                if (failLoginCount == 5)
                {
                    var errorModel = new ErrorModel(ErrorCode.TooManyRequests, "连续登录失败次数超过5次,账号已锁定");
                    log.Message = JsonConvert.SerializeObject(errorModel);
                    await _userRepository.UpdateAsync(new SysUser()
                    {
                        ID = user.ID, Status = 2
                    }, x => x.Status);

                    throw new BusinessException(errorModel);
                }

                if (HashHelper.GetHashedString(HashType.MD5, inputDto.Password, user.Salt) != user.Password)
                {
                    var errorModel = new ErrorModel(ErrorCode.NotFound, "用户名或密码错误");
                    log.Message = JsonConvert.SerializeObject(errorModel);
                    await _loginLogRepository.InsertAsync(log);

                    throw new BusinessException(errorModel);
                }

                if (string.IsNullOrEmpty(user.RoleId))
                {
                    var errorModel = new ErrorModel(ErrorCode.Forbidden, "未分配任务角色,请联系管理员");
                    log.Message = JsonConvert.SerializeObject(errorModel);
                    await _loginLogRepository.InsertAsync(log);

                    throw new BusinessException(errorModel);
                }
            }

            log.Message = "登录成功";
            log.Succeed = true;
            await _loginLogRepository.InsertAsync(log);

            return(_mapper.Map <UserValidateDto>(user));
        }
 public bool Add(SysLoginLog model)
 {
     return(sysLoginLogDal.Add(model) == 0 ? false : true);
 }
Example #9
0
 /// <summary>
 /// 插入记录
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public long Add(SysLoginLog model)
 {
     return(this._loginTokenRepository.Insert(model));
 }
Example #10
0
        public static void WriteLogLogin(SysLoginLog logEntry)
        {
            LoginEmitter service = new LoginEmitter();

            service.EmitLog(logEntry);
        }