Skip to content

Commit 48fa958

Browse files
authored
Merge pull request #33 from Decodeat/junho/hotfix-temp
Fix: 리프레시토큰 재발급 api 수정
2 parents 3ed505d + af76ae2 commit 48fa958

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

src/main/java/com/DecodEat/domain/refreshToken/controller/TokenController.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.DecodEat.domain.refreshToken.service.TokenService;
66
import com.DecodEat.global.apiPayload.ApiResponse;
77
import io.swagger.v3.oas.annotations.Operation;
8+
import jakarta.servlet.http.HttpServletRequest;
89
import lombok.RequiredArgsConstructor;
910
import org.springframework.web.bind.annotation.PostMapping;
1011
import org.springframework.web.bind.annotation.RequestBody;
@@ -17,11 +18,8 @@ public class TokenController {
1718

1819
@PostMapping("/api/token")
1920
@Operation(summary = "액세스 토큰 재발급 API")
20-
public ApiResponse<CreateAccessTokenResponse> createAccessToken(@RequestBody CreateAccessTokenRequest request){
21+
public ApiResponse<String> createAccessToken(HttpServletRequest request){
2122

22-
String refreshToken = request.getRefreshToken();
23-
String newAccessToken = tokenService.createNewAccessToken(refreshToken);
24-
25-
return ApiResponse.onSuccess(new CreateAccessTokenResponse(newAccessToken));
23+
return ApiResponse.onSuccess(tokenService.refreshAccessToken(request));
2624
}
2725
}

src/main/java/com/DecodEat/domain/refreshToken/service/TokenService.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
import com.DecodEat.domain.users.entity.User;
77
import com.DecodEat.domain.users.service.UserService;
88
import com.DecodEat.global.config.jwt.JwtTokenProvider;
9+
import com.DecodEat.global.config.oauth.OAuth2SuccessHandler;
910
import com.DecodEat.global.exception.GeneralException;
11+
import com.DecodEat.global.util.CookieUtil;
12+
import jakarta.servlet.http.Cookie;
13+
import jakarta.servlet.http.HttpServletRequest;
1014
import lombok.RequiredArgsConstructor;
1115
import org.springframework.stereotype.Service;
1216

@@ -31,4 +35,17 @@ public String createNewAccessToken(String refreshToken){
3135

3236
return jwtTokenProvider.generateToken(user, Duration.ofHours(2)); // 액세스 토큰 유효시간 : 2시간
3337
}
38+
39+
public String refreshAccessToken(HttpServletRequest request){
40+
Cookie cookie = CookieUtil
41+
.getCookie(request, OAuth2SuccessHandler.REFRESH_TOKEN_COOKIE_NAME)
42+
.orElseThrow(() -> new GeneralException(NO_RESULT));
43+
44+
String refreshToken = cookie.getValue();
45+
46+
if(!jwtTokenProvider.validToken(refreshToken)){
47+
throw new GeneralException(UNEXPECTED_TOKEN);
48+
}
49+
return createNewAccessToken(refreshToken);
50+
}
3451
}

src/main/java/com/DecodEat/global/config/oauth/OAuth2SuccessHandler.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.springframework.web.util.UriComponentsBuilder;
1717

1818
import java.io.IOException;
19+
import java.net.URLEncoder;
20+
import java.nio.charset.StandardCharsets;
1921
import java.time.Duration;
2022
import java.util.Map;
2123

@@ -51,7 +53,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
5153

5254
// 2. 액세스 토큰 생성
5355
String accessToken = tokenProvider.generateToken(user, ACCESS_TOKEN_DURATION);
54-
addAccessTokenToCookie(request, response, accessToken);
5556

5657
String targetUrl = getTargetUrl(accessToken);
5758

@@ -71,14 +72,6 @@ private void saveRefreshToken(Long userId, String newRefreshToken) {
7172
refreshTokenRepository.save(refreshToken);
7273
}
7374

74-
private void addAccessTokenToCookie(HttpServletRequest request, HttpServletResponse response, String accessToken) {
75-
int cookieMaxAge = (int) ACCESS_TOKEN_DURATION.toSeconds();
76-
CookieUtil.deleteCookie(request, response, ACCESS_TOKEN_COOKIE_NAME);
77-
CookieUtil.addCookie(response, ACCESS_TOKEN_COOKIE_NAME, accessToken, cookieMaxAge);
78-
}
79-
80-
81-
8275
// 생성된 리프레시 토큰을 쿠키에 저장
8376
private void addRefreshTokenToCookie(HttpServletRequest request, HttpServletResponse response, String refreshToken) {
8477
int cookieMaxAge = (int) REFRESH_TOKEN_DURATION.toSeconds();
@@ -94,9 +87,11 @@ private void clearAuthenticationAttributes(HttpServletRequest request, HttpServl
9487

9588
// 액세스 토큰을 리다이렉트 경로에 파라미터로 추가
9689
private String getTargetUrl(String token) {
97-
return UriComponentsBuilder.fromUriString("/decodeat.store") //todo:로그인 후 스웨거화면
98-
.queryParam("token", token)
90+
return UriComponentsBuilder.fromUriString("https://decodeat.netlify.app")
91+
.queryParam("access_token", token)
9992
.build()
10093
.toUriString();
10194
}
95+
96+
10297
}

0 commit comments

Comments
 (0)