From 2c11c42b24710e0ed3f9c0b610004fbcdcff9b91 Mon Sep 17 00:00:00 2001 From: JONGTAE02 Date: Wed, 3 Dec 2025 19:16:48 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20OAuth2SuccessHandler=EC=97=90?= =?UTF-8?q?=EC=84=9C=20JSON=20=EC=9D=91=EB=8B=B5=20=EB=8C=80=EC=8B=A0=20?= =?UTF-8?q?=ED=94=84=EB=A1=A0=ED=8A=B8=EC=97=94=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/handler/OAuth2SuccessHandler.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/example/skillboost/auth/handler/OAuth2SuccessHandler.java b/src/main/java/com/example/skillboost/auth/handler/OAuth2SuccessHandler.java index 0aeac80..65ecb17 100644 --- a/src/main/java/com/example/skillboost/auth/handler/OAuth2SuccessHandler.java +++ b/src/main/java/com/example/skillboost/auth/handler/OAuth2SuccessHandler.java @@ -13,6 +13,7 @@ import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.stereotype.Component; +import org.springframework.web.util.UriComponentsBuilder; import java.io.IOException; import java.util.HashMap; @@ -27,7 +28,6 @@ public class OAuth2SuccessHandler implements AuthenticationSuccessHandler { private final UserRepository userRepository; private final TokenService tokenService; private final ObjectMapper objectMapper = new ObjectMapper(); - @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, @@ -36,10 +36,11 @@ public void onAuthenticationSuccess(HttpServletRequest request, log.info("OAuth2 인증 성공!"); OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal(); - String email = (String) oAuth2User.getAttributes().get("email"); + Map attributes = oAuth2User.getAttributes(); + String email = (String) attributes.get("email"); if (email == null || email.isEmpty()) { - String githubId = String.valueOf(oAuth2User.getAttributes().get("id")); + String githubId = String.valueOf(attributes.get("id")); email = githubId + "@github.temp"; log.warn("이메일 비공개 사용자 - 임시 이메일 사용: {}", email); } @@ -59,20 +60,15 @@ public void onAuthenticationSuccess(HttpServletRequest request, log.info("JWT 토큰 생성 및 Redis 저장 완료: {}", user.getEmail()); - // JSON 응답 생성 - Map responseData = new HashMap<>(); - responseData.put("success", true); - responseData.put("accessToken", accessToken); - responseData.put("refreshToken", refreshToken); // 프론트엔드에서 저장해야 함 - responseData.put("email", user.getEmail()); - responseData.put("username", user.getUsername()); + // JSON 응답 대신 리다이렉트를 수행하는 로직 - // 클라이언트에 JWT 응답 - response.setContentType("application/json;charset=UTF-8"); - response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().write(objectMapper.writeValueAsString(responseData)); + String frontendRedirectBaseUrl = "https://www.skill-boost.store"; + String frontendTokenHandlerPath = "/oauth2/redirect"; + String targetUrl = UriComponentsBuilder.fromUriString(frontendRedirectBaseUrl + frontendTokenHandlerPath) + .queryParam("accessToken", accessToken) + .queryParam("refreshToken", refreshToken) + .build().toUriString(); - // 실제 서비스 배포 시, 사용자를 다시 웹사이트 메인 화면으로 돌려보내기 위해 사용 - // response.sendRedirect("http://localhost:3000/oauth2/redirect?accessToken=" + accessToken + "&refreshToken=" + refreshToken); + response.sendRedirect(targetUrl); } } \ No newline at end of file From 9838dabd0b23f7cf88ad61391441ece01f01a9b8 Mon Sep 17 00:00:00 2001 From: JONGTAE02 Date: Wed, 3 Dec 2025 19:30:56 +0900 Subject: [PATCH 2/2] fix(ci/test): Add dummy 'gemini' configuration to application-test.yml --- src/main/resources/application-test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index d0b8828..63d724e 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -30,3 +30,8 @@ spring: jwt: secret-key: TXlTdXBlclNlY3JldEtleUZvclNraWxsQm9vc3RQcm9qZWN0MjAyNUNoYWxsZW5nZSE= expiration-ms: 100000 + +gemini: + model: test-model + api: + key: test-key