Example #1
0
        public virtual async Task <IActionResult> RefreshToken([FromBody] RefreshTokenForm refreshTokenForm, CancellationToken cancellationToken = default(CancellationToken))
        {
            var claimsPrincipal = tokenFactory.GetPrincipalFromExpiredToken(refreshTokenForm.AccessToken);
            var userId          = claimsPrincipal.Identity.GetUserId <int>();
            var claimList       = claimsPrincipal.Claims;
            await tokenService.DeleteExpiredRefreshTokensAsync(cancellationToken);

            var refreshToken = await tokenService.FindRefreshToken(userId, refreshTokenForm.RefreshToken, cancellationToken);

            if (refreshToken == null || refreshToken.Expiration < DateTime.Now)
            {
                return(Unauthorized(new ResponseMessage()
                {
                    Title = "خطای احراز هویت", Descripton = "رفرش توکن منقضی یا نامعتبر است"
                }));
            }



            var generatedToken = tokenFactory.GenerateToken(claimList);

            refreshToken.RefreshToken = generatedToken.RefreshToken;
            refreshToken.Expiration   = generatedToken.AccessTokenExpirationTime;
            tokenService.UpdateRefreshToken(refreshToken);



            return(Created(string.Empty, generatedToken));
        }
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenForm token)
        {
            try
            {
                var userId      = _jwtService.GetRefreshTokenUserId(token.Token);
                var accessToken = await _authService.GetAccessToken(userId);

                var refreshToken = await _authService.GetRefreshToken(userId);

                return(refreshToken != null && accessToken != null ? (IActionResult)StatusCode(201, new TokenResponse()
                {
                    AccessToken = accessToken, RefreshToken = refreshToken
                }) : StatusCode(500));
            }
            catch
            {
                return(StatusCode(500));
            }
        }