示例#1
0
        public async Task <IActionResult> Login([FromBody] UserValidateInputDto userDto)
        {
            var userValidateDto = await _accountService.Login(userDto);

            return(new OkObjectResult(new
            {
                Token = JwtTokenHelper.CreateAccessToken(_jwtConfig, userValidateDto),
                RefreshToken = JwtTokenHelper.CreateRefreshToken(_jwtConfig, userValidateDto)
            }));
        }
示例#2
0
        public async Task <UserTokenInfoDto> Login([FromBody] UserValidateInputDto userDto)
        {
            var userValidateDto = await _accountService.Login(userDto);

            return(new UserTokenInfoDto
            {
                Token = JwtTokenHelper.CreateAccessToken(_jwtConfig, userValidateDto),
                RefreshToken = JwtTokenHelper.CreateRefreshToken(_jwtConfig, userValidateDto)
            });
        }
示例#3
0
        public async Task <ActionResult <UserTokenInfoDto> > Login([FromBody] UserValidateInputDto userDto)
        {
            var result = await _accountService.Login(userDto);

            if (result.IsSuccess)
            {
                return(CreatedAtAction(nameof(GetCurrentUserInfo)
                                       , new UserTokenInfoDto
                {
                    Token = JwtTokenHelper.CreateAccessToken(_jwtConfig, result.Content),
                    RefreshToken = JwtTokenHelper.CreateRefreshToken(_jwtConfig, result.Content)
                }));
            }

            return(Problem(result.ProblemDetails));
        }
示例#4
0
        public async Task <UserTokenInfoDto> Login([FromBody] UserValidateInputDto userDto)
        {
            var ipAddress = _contextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            var device    = _contextAccessor.HttpContext.Request.Headers["device"].ToString();

            if (string.IsNullOrWhiteSpace(device))
            {
                device = "web";
            }

            var userValidateDto = await _accountService.Login(userDto, new CurrenUserInfoDto { RemoteIpAddress = ipAddress, Device = device });

            return(new UserTokenInfoDto
            {
                Token = JwtTokenHelper.CreateAccessToken(_jwtConfig, userValidateDto),
                RefreshToken = JwtTokenHelper.CreateRefreshToken(_jwtConfig, userValidateDto)
            });
        }
示例#5
0
        public async Task <UserValidateDto> Login(UserValidateInputDto inputDto, CurrenUserInfoDto currentUser)
        {
            //var user4 = _userRepository.GetAll<SysMenu>().FirstOrDefault();
            //var user0 = _rsp.GetAll<SysUser>().FirstOrDefault();
            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);

            dynamic log = new ExpandoObject();

            log.ID              = IdGenerater.GetNextId(IdGenerater.DatacenterId, IdGenerater.WorkerId);
            log.Account         = inputDto.Account;
            log.CreateTime      = DateTime.Now;
            log.Device          = currentUser.Device;
            log.RemoteIpAddress = currentUser.RemoteIpAddress;
            log.Message         = string.Empty;
            log.Succeed         = false;
            log.UserId          = user?.ID;
            log.UserName        = user?.Name;

            if (user == null)
            {
                var errorModel = new ErrorModel(ErrorCode.NotFound, "用户名或密码错误");
                log.Message = JsonSerializer.Serialize(errorModel);
                throw new BusinessException(errorModel);
            }
            else
            {
                if (user.Status != 1)
                {
                    var errorModel = new ErrorModel(ErrorCode.TooManyRequests, "账号已锁定");
                    log.Message = JsonSerializer.Serialize(errorModel);
                    _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, 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);

                var failLoginCount = 2;

                if (failLoginCount == 5)
                {
                    var errorModel = new ErrorModel(ErrorCode.TooManyRequests, "连续登录失败次数超过5次,账号已锁定");
                    log.Message = JsonSerializer.Serialize(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 = JsonSerializer.Serialize(errorModel);
                    _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                    throw new BusinessException(errorModel);
                }

                if (string.IsNullOrEmpty(user.RoleId))
                {
                    var errorModel = new ErrorModel(ErrorCode.Forbidden, "未分配任务角色,请联系管理员");
                    log.Message = JsonSerializer.Serialize(errorModel);
                    _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                    throw new BusinessException(errorModel);
                }
            }

            log.Message = "登录成功";
            log.Succeed = true;
            _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
            return(_mapper.Map <UserValidateDto>(user));
        }
示例#6
0
        public async Task <AppSrvResult <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);

            if (user == null)
            {
                return(Problem(HttpStatusCode.NotFound, "用户名或密码错误"));
            }

            dynamic log = new ExpandoObject();

            log.Account    = inputDto.Account;
            log.CreateTime = DateTime.Now;
            var httpContext = HttpContextUtility.GetCurrentHttpContext();

            log.Device          = httpContext.Request.Headers["device"].FirstOrDefault() ?? "web";
            log.RemoteIpAddress = httpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            log.Succeed         = false;
            log.UserId          = user?.ID;
            log.UserName        = user?.Name;

            if (user.Status != 1)
            {
                var problem = Problem(HttpStatusCode.TooManyRequests, "账号已锁定");
                log.Message    = problem.Detail;
                log.StatusCode = problem.Status;
                _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                return(problem);
            }

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

            var failLoginCount = 2;

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

                _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                return(problem);
            }

            if (HashHelper.GetHashedString(HashType.MD5, inputDto.Password, user.Salt) != user.Password)
            {
                var problem = Problem(HttpStatusCode.BadRequest, "用户名或密码错误");
                log.Message    = problem.Detail;
                log.StatusCode = problem.Status;
                _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                return(problem);
            }

            if (user.RoleId.IsNullOrEmpty())
            {
                var problem = Problem(HttpStatusCode.Forbidden, "未分配任务角色,请联系管理员");
                log.Message    = problem.Detail;
                log.StatusCode = problem.Status;
                _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);
                return(problem);
            }

            log.Message    = "登录成功";
            log.StatusCode = (int)HttpStatusCode.Created;
            log.Succeed    = true;
            _mqProducer.BasicPublish(MqExchanges.Logs, MqRoutingKeys.Loginlog, log);

            return(_mapper.Map <UserValidateDto>(user));
        }
示例#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));
        }