public async Task <IActionResult> TwoStepVerification([FromBody] TwoFactorDto twoFactorDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

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

            if (user == null)
            {
                return(BadRequest("Invalid Request"));
            }

            var validVerification = await _userManager.VerifyTwoFactorTokenAsync(user, twoFactorDto.Provider, twoFactorDto.Token);

            if (!validVerification)
            {
                return(BadRequest("Invalid Token Verification"));
            }

            var token = await _jwtHandler.GenerateToken(user);

            return(Ok(new AuthResponseDto {
                IsAuthSuccessful = true, Token = token
            }));
        }
Пример #2
0
        public async Task <IActionResult> LoginVerification([FromBody] TwoFactorDto twoFactorDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var userApp = await _userManager.FindByEmailAsync(twoFactorDto.Email);

            if (userApp == null)
            {
                return(BadRequest(new AuthResponseDto {
                    Message = "Tài khoản không tồn tại!"
                }));
            }

            var validVerification = await _userManager.VerifyTwoFactorTokenAsync(userApp, twoFactorDto.Provider, twoFactorDto.Token);

            if (!validVerification)
            {
                return(BadRequest(new AuthResponseDto {
                    Message = "Token để xác thực đăng nhập không hợp lệ!"
                }));
            }

            var user = await _repository.User.GetUserByApplicationUserIDAsync(userApp.Id);

            var claims = await _jwtHandler.GenerateClaims(userApp, user);

            await _userManager.ResetAccessFailedCountAsync(userApp);

            var accessToken  = _tokenService.GenerateAccessToken(claims, _config);
            var refreshToken = _tokenService.GenerateRefreshToken();

            ResponseDetails response = _repository.User.UpdateUserRefreshToken(
                user,
                refreshToken,
                DateTime.Now.AddMinutes(Convert.ToDouble(_config[$"{NamePars.JwtSettings}:{NamePars.ExpireTime}"]))
                );

            if (response.StatusCode == ResponseCode.Success)
            {
                _repository.Save();
            }
            else
            {
                _logger.LogError($"Lỗi khi cấp refresh token khi xác thực đăng nhập cho user với id {user.UserID}");
            }

            return(Ok(new
            {
                Token = accessToken,
                RefreshToken = refreshToken
            }));
        }
Пример #3
0
        public async Task <IActionResult> TwoFactor([FromBody] TwoFactorDto login)
        {
            var user = await _identityRepository.GetUserByEmail(login.Email);

            var           userInformation = _userInformationRepository.Get(u => u.UserId.ToString() == user.Id).FirstOrDefault();
            SecurityToken securityToken;

            if (user == null || userInformation == null)
            {
                return(NotFound());
            }
            try
            {
                // Strip spaces and hypens
                var verificationCode = login.Code.Replace(" ", string.Empty).Replace("-", string.Empty);
                securityToken = await _multiFactorAuthenticationHelper.ValidateTwoFactor(user, verificationCode);

                if (!user.TwoFactorEnabled)
                {
                    user.TwoFactorEnabled = true;
                    await _identityRepository.Update(user, null);
                }

                var rolesList = await _userManager.GetRolesAsync(user);

                var userDto = new RoleDto
                {
                    Id               = Guid.Parse(user.Id),
                    Email            = user.Email,
                    PhoneNumber      = user.PhoneNumber,
                    Name             = userInformation.Name,
                    Dob              = userInformation.Dob,
                    Gender           = userInformation.Gender,
                    City             = userInformation.City,
                    Street           = userInformation.Street,
                    HouseNumber      = userInformation.HouseNumber,
                    HouseNumberAddon = userInformation.HouseNumberAddon,
                    PostalCode       = userInformation.PostalCode,
                    Country          = userInformation.Country,
                    Roles            = rolesList
                };

                return(Ok(new { Token = new JwtSecurityTokenHandler().WriteToken(securityToken), User = userDto }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
        }