Beispiel #1
0
        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();
        }