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