diff --git a/src/main/java/Gotcha/common/jwt/JwtHelper.java b/src/main/java/Gotcha/common/jwt/JwtHelper.java index 4a907cfc..1908b074 100644 --- a/src/main/java/Gotcha/common/jwt/JwtHelper.java +++ b/src/main/java/Gotcha/common/jwt/JwtHelper.java @@ -36,6 +36,8 @@ public TokenDto createToken(User user) { } public TokenDto reissueToken(String refreshToken) { + refreshTokenService.isExpiredRefreshToken(refreshToken); + String email = tokenProvider.getEmail(refreshToken); if (!refreshTokenService.existedRefreshToken(email, refreshToken)) diff --git a/src/main/java/Gotcha/common/jwt/RefreshTokenService.java b/src/main/java/Gotcha/common/jwt/RefreshTokenService.java index 907b8652..2b7fb19a 100644 --- a/src/main/java/Gotcha/common/jwt/RefreshTokenService.java +++ b/src/main/java/Gotcha/common/jwt/RefreshTokenService.java @@ -1,6 +1,9 @@ package Gotcha.common.jwt; +import Gotcha.common.exception.CustomException; +import Gotcha.common.jwt.exception.JwtExceptionCode; import Gotcha.common.util.RedisUtil; +import io.jsonwebtoken.ExpiredJwtException; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -39,4 +42,12 @@ public boolean existedRefreshToken(String email, String requestRefreshToken) { return storedRefreshToken.equals(requestRefreshToken); } + + public void isExpiredRefreshToken(String refreshToken) { + try { + tokenProvider.isExpired(refreshToken); + } catch (ExpiredJwtException e) { + throw new CustomException(JwtExceptionCode.REFRESH_TOKEN_EXPIRED); + } + } } diff --git a/src/main/java/Gotcha/domain/auth/api/AuthApi.java b/src/main/java/Gotcha/domain/auth/api/AuthApi.java index 14db4031..16b2ad10 100644 --- a/src/main/java/Gotcha/domain/auth/api/AuthApi.java +++ b/src/main/java/Gotcha/domain/auth/api/AuthApi.java @@ -123,7 +123,17 @@ public interface AuthApi { "message": "Refresh Token을 찾을 수 없습니다." } """) - })) + })), + @ApiResponse(responseCode = "401", description = "refreshToken 만료", + content = @Content(mediaType = "application/json", examples = { + @ExampleObject(value = """ + { + "status": "UNAUTHORIZED", + "message": "Refresh Token이 만료되었습니다." + } + """) + }) + ) }) ResponseEntity reIssueToken(@CookieValue(name = REFRESH_COOKIE_VALUE, required = false) String refreshToken);