Example #1
0
        public async Task <ActionResult <RefreshTokenResponse> > RefreshToken(RefreshTokenRequest request)
        {
            var principal = TokenUtility.GetClaimsPrincipal(request.OldToken);
            var userName  = principal.Identity.Name;
            var userData  = await _userRepository.FindUserByUserName(userName);

            if (userData != null && userData.RefreshToken.Equals(request.RefreshToken))
            {
                userData.RefreshToken = TokenUtility.GenerateRefreshToken();
                await _userRepository.Update(userData);

                var claims = new List <Claim>
                {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim(JwtRegisteredClaimNames.UniqueName, userData.UserName),
                };

                claims.AddRange(await _userRepository.GetUserClaims(userData));

                var token    = TokenUtility.GenerateToken(claims);
                var response = new LoginResponse
                {
                    Token          = token,
                    RefreshToken   = userData.RefreshToken,
                    ExpirationDate = DateTime.Now.AddMinutes(60).ToString("g")
                };

                return(Ok(response));
            }

            return(Unauthorized());
        }