public async Task <JwtManagerResponse> RefreshTokenAsync(RefreshTokenRequestModel refreshTokenRequest) { if (refreshTokenRequest == null) { throw new EShopperException("Please provide required information!"); } var validatedToken = GetPrincipalFromToken(refreshTokenRequest.AccessToken); if (validatedToken == null) { throw new EShopperException("Invalid Access Token!"); } string userEmail = validatedToken.Claims.FirstOrDefault(x => x.Type == UserClaimsType.Email).Value; var userDetails = await _eShopperUserManager.FindByEmailAsync(userEmail); if (userDetails == null) { throw new EShopperException("User not found!"); } var validateRefreshToken = await _eShopperUserManager.VerifyUserTokenAsync(userDetails, "EShopperAuthentication", "RefreshToken", refreshTokenRequest.RefreshToken); if (!validateRefreshToken) { // Invalid Refresh Token! throw new EShopperException("This refresh token is invalid!"); } var newClaims = await GenerateClaims(userDetails); var newRefreshToken = await GenerateRefreshToken(userDetails, "EShopperAuthentication"); var newAccessToken = GenerateToken(newClaims); return(new JwtManagerResponse { AccessToken = newAccessToken, RefreshToken = newRefreshToken }); }
public async Task <AuthenticationResponseModel> RegisterAsync(RegisterRequestModel registerRequestModel) { if (registerRequestModel == null) { throw new EShopperException("Please provide required information!"); } EShopperUser isEmailExist = await _eShopperUserManager.FindByEmailAsync(registerRequestModel.Email); if (isEmailExist != null) { throw new EShopperException("Email address already exist!"); } EShopperUser eShopperIdentity = new EShopperUser { Email = registerRequestModel.Email, UserName = registerRequestModel.Username }; // Begin Transaction... using (var transaction = _unitOfWork.EShopperDbContext.Database.BeginTransaction()) { try { IdentityResult registerEShopperUserResult = await _eShopperUserManager.CreateAsync(eShopperIdentity, registerRequestModel.Password); if (registerEShopperUserResult.Succeeded) { UserDetails usersDetail = new UserDetails { User = eShopperIdentity, Fullname = registerRequestModel.Fullname, RegisterDate = DateTime.UtcNow }; IdentityResult addToRoleResult = await _eShopperUserManager.AddToRoleAsync(eShopperIdentity, "USER"); if (!addToRoleResult.Succeeded) { throw new EShopperException(); } _unitOfWork.UsersDetail.Add(usersDetail); _unitOfWork.Complete(); transaction.Commit(); JwtManagerResponse jwtResponse = await _jwtManager.GenerateToken(eShopperIdentity); EShopperUser getUserDetails = _eShopperUserManager.GetUserWithUserDetailsByEmail(registerRequestModel.Email); EShopperUserDto mappedUserDetails = _mapper.Map <EShopperUserDto>(getUserDetails); _logger.LogInformation($"{getUserDetails.Email} - Registered with EShopperAuthentication"); return(new AuthenticationResponseModel { AccessToken = jwtResponse.AccessToken, RefreshToken = jwtResponse.RefreshToken, EShopperUser = mappedUserDetails }); } } catch (Exception ex) { _logger.LogError(ex.Message); throw new EShopperException(); } finally { transaction.Dispose(); } } throw new EShopperException(); }