public async Task <ActionResult> Login(LoginInputDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await _userManager.FindByEmailAsync(model.Email);

            if (user == null)
            {
                return(NotFound());
            }

            var isAuthenticated = await _userManager.CheckPasswordAsync(user, model.Password);

            if (!isAuthenticated)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized));
            }

            var refreshToken = _tokenFactory.GenerateToken();

            user.RefreshToken = refreshToken;

            await _userManager.UpdateAsync(user);

            var response = new LoginOutputDto(
                await _jwtFactory.GenerateEncodedToken(user.Id, user.UserName),
                refreshToken,
                true);

            return(Ok(response));
        }
        public async Task <ActionResult> RefreshToken(RefreshTokenInputDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await _userManager.FindByEmailAsync(dto.Email);

            if (user == null)
            {
                return(NotFound());
            }

            if (user.RefreshToken != dto.RefreshToken)
            {
                return(BadRequest("Invalid refresh token"));
            }

            var newToken = await _jwtFactory.GenerateEncodedToken(user.Id, user.UserName);

            var newRefreshToken = _tokenFactory.GenerateToken();

            user.RefreshToken = newRefreshToken;
            await _userManager.UpdateAsync(user);

            var response = new LoginOutputDto(newToken, newRefreshToken, true);

            return(Ok(response));
        }
Пример #3
0
 /// <summary>
 /// 保存客户端
 /// </summary>
 /// <param name="dto"></param>
 /// <returns></returns>
 public bool SaveClientInfo(LoginOutputDto dto)
 {
     if (_Cache.Keys.Contains("ClientInfo"))
     {
         _Cache.Remove("ClientInfo");
     }
     return(_Cache.Add("ClientInfo", dto));
 }
Пример #4
0
        public virtual LoginOutputDto Login(LoginInputDto vm)
        {
            LoginOutputDto result = null;
            var            userId = this.GetUserIdForValue(vm.Account);

            if (!string.IsNullOrEmpty(userId))
            {
                var userDto = userRepository.Get(userId);
                if (userDto.Account == "admin" && string.IsNullOrEmpty(userDto.Password))
                {
                    userDto.Password = EncryptUtils.Encrypt("admin");
                    userRepository.UpdatePassword(userDto.Id, userDto.Password);
                }

                if (userDto.Status == UserStatus.Disabled)
                {
                    LogUtils.Info($"【登录】{userDto.Name}({userDto.Account}) 已被禁用,登录失败!");
                    throw new ApiException(ApiStatus.Error, "账号已被禁用, 请与管理员联系!");
                }
                if (!string.IsNullOrEmpty(userDto.Password))
                {
                    var pwd = EncryptUtils.Decrypt(userDto.Password);
                    pwd = EncryptUtils.Md5(pwd);
                    pwd = EncryptUtils.Md5($"{pwd}|{vm.Random}");
                    if (string.Equals(vm.Password, pwd, StringComparison.OrdinalIgnoreCase))
                    {
                        result = new LoginOutputDto()
                        {
                            Id      = userDto.Id,
                            RoleId  = userDto.RoleId,
                            Account = userDto.Account,
                            Name    = userDto.Name
                        };
                    }
                }
            }

            return(result);
        }