From 21ea0d8abfd27dc5aac1c3a8a03d31d945535801 Mon Sep 17 00:00:00 2001 From: Jaekyun Date: Fri, 26 Sep 2025 21:30:11 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=EB=A1=A4=EB=B0=B1=20+=20=ED=94=84?= =?UTF-8?q?=EB=A1=A0=ED=8A=B8=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kakao/controller/KakaoController.java | 32 +++++++++++++------ .../user/kakao/service/KakaoService.java | 10 ++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/Back-end/src/main/java/com/example/backend/user/kakao/controller/KakaoController.java b/Back-end/src/main/java/com/example/backend/user/kakao/controller/KakaoController.java index 5ef34fb..cf969b6 100644 --- a/Back-end/src/main/java/com/example/backend/user/kakao/controller/KakaoController.java +++ b/Back-end/src/main/java/com/example/backend/user/kakao/controller/KakaoController.java @@ -21,19 +21,33 @@ public class KakaoController { private final KakaoService kakaoService; - // 로그인 페이지 리디렉션 + @Operation( + summary = "카카오 로그인 페이지 리디렉션", + description = "카카오 로그인 페이지로 리디렉션합니다. 프론트는 이 URL로 GET 요청하세요." + ) @GetMapping("/login") - public void redirectToKakao(HttpServletResponse response) throws IOException { - String kakaoAuthUrl = kakaoService.getKakaoAuthUrl(); + public void redirectToKakao( + @RequestParam(value = "state", required = false) String state, + HttpServletResponse response + ) throws IOException { + String kakaoAuthUrl = kakaoService.getKakaoAuthUrl(state); response.sendRedirect(kakaoAuthUrl); } - // 카카오 콜백 (백엔드 직접 받음) - @GetMapping("/callback") + + @Operation( + summary = "카카오 로그인 콜백", + description = "카카오 로그인 완료 후 받은 code를 이용해 JWT 및 유저 정보를 반환합니다." + ) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "JWT 및 유저 정보 반환 성공"), + }) + @PostMapping("/callback") public ResponseEntity kakaoCallback( - @RequestParam String code, - @RequestParam(required = false) String state + @RequestBody KakaoRequest request ) { - return kakaoService.getUserInfo(code); + return kakaoService.getUserInfo(request.getCode()); } -} + + +} \ No newline at end of file diff --git a/Back-end/src/main/java/com/example/backend/user/kakao/service/KakaoService.java b/Back-end/src/main/java/com/example/backend/user/kakao/service/KakaoService.java index def19d1..a0bd307 100644 --- a/Back-end/src/main/java/com/example/backend/user/kakao/service/KakaoService.java +++ b/Back-end/src/main/java/com/example/backend/user/kakao/service/KakaoService.java @@ -13,6 +13,8 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Map; @Service @@ -28,11 +30,15 @@ public class KakaoService { @Value("${kakao.redirectUri}") private String redirectUri; - public String getKakaoAuthUrl() { - return "https://kauth.kakao.com/oauth/authorize?response_type=code" + public String getKakaoAuthUrl(String state) { + String base = "https://kauth.kakao.com/oauth/authorize?response_type=code" + "&client_id=" + restApiKey + "&redirect_uri=" + redirectUri + "&scope=account_email,profile_nickname,profile_image"; + if (state != null && !state.isBlank()) { + base += "&state=" + URLEncoder.encode(state, StandardCharsets.UTF_8); + } + return base; } public ResponseEntity getUserInfo(String code) {