diff --git a/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java b/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java index 827a738..186e95c 100644 --- a/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java +++ b/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java @@ -36,7 +36,8 @@ public class MemberController { @Operation( summary = "구글 로그인 API", description = "구글 인가코드을 통해 사용자의 정보를 등록 및 토큰 + 역할을 발급합니다. " + - "

[enum]ROLE -> 처음사용자 : GUEST, 일반사용자 : USER, 관리자 : ADMIN" + "
- type: 환경에 따라 local 또는 deploy를 보내주세요" + + "
- [enum]ROLE -> 처음사용자 : GUEST, 일반사용자 : USER, 관리자 : ADMIN" ) @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "로그인 성공"), @@ -47,13 +48,15 @@ public class MemberController { @PostMapping("/google/login") public ResponseEntity> loginWithGoogle(@Valid @RequestBody LoginRequestDTO loginRequestDTO) { - LoginResponseDTO response = memberService.loginWithGoogle(loginRequestDTO.getCode()); + LoginResponseDTO response = memberService.loginWithGoogle(loginRequestDTO.getCode(), loginRequestDTO.getType()); return ApiResponse.success(SuccessStatus.SEND_LOGIN_SUCCESS, response); } @Operation( summary = "카카오 로그인 API", - description = "카카오 인가코드을 통해 사용자의 정보를 등록 및 토큰 + 역할을 발급합니다. (ROLE -> 처음사용자 : GUEST, 일반사용자 : USER, 관리자 : ADMIN)" + description = "카카오 인가코드을 통해 사용자의 정보를 등록 및 토큰 + 역할을 발급합니다." + + "
- type: 환경에 따라 local 또는 deploy를 보내주세요" + + "
- [enum]ROLE -> 처음사용자 : GUEST, 일반사용자 : USER, 관리자 : ADMIN" ) @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "로그인 성공"), @@ -64,7 +67,7 @@ public ResponseEntity> loginWithGoogle(@Valid @Req @PostMapping("/kakao/login") public ResponseEntity> loginWithKakao(@Valid @RequestBody LoginRequestDTO loginRequestDTO) { - LoginResponseDTO response = memberService.loginWithKakao(loginRequestDTO.getCode()); + LoginResponseDTO response = memberService.loginWithKakao(loginRequestDTO.getCode(), loginRequestDTO.getType()); return ApiResponse.success(SuccessStatus.SEND_LOGIN_SUCCESS, response); } diff --git a/src/main/java/com/moongeul/backend/api/member/dto/LoginRequestDTO.java b/src/main/java/com/moongeul/backend/api/member/dto/LoginRequestDTO.java index fee1a86..a59ce24 100644 --- a/src/main/java/com/moongeul/backend/api/member/dto/LoginRequestDTO.java +++ b/src/main/java/com/moongeul/backend/api/member/dto/LoginRequestDTO.java @@ -8,4 +8,5 @@ public class LoginRequestDTO { @NotBlank(message = "인가코드가 입력되지 않았습니다.") private String code; // 인가코드 + private String type; // local, deploy } diff --git a/src/main/java/com/moongeul/backend/api/member/service/GoogleOAuthService.java b/src/main/java/com/moongeul/backend/api/member/service/GoogleOAuthService.java index 5319b6a..c6475f3 100644 --- a/src/main/java/com/moongeul/backend/api/member/service/GoogleOAuthService.java +++ b/src/main/java/com/moongeul/backend/api/member/service/GoogleOAuthService.java @@ -32,11 +32,14 @@ public class GoogleOAuthService { private String clientId; @Value("${spring.security.oauth2.client.registration.google.client-secret}") private String clientSecret; - @Value("${spring.security.oauth2.client.registration.google.redirect-uri}") - private String redirectUri; + + @Value("${oauth-config.google.local}") + private String localRedirectUri; + @Value("${oauth-config.google.deploy}") + private String deployRedirectUri; // Google 토큰 획득 로직 (WebClient 방식으로 수정 - 비동기 방식 구현) - public AccessTokenResponseDTO getGoogleToken(String code) { + public AccessTokenResponseDTO getGoogleToken(String code, String type) { String decodedCode; try { @@ -48,6 +51,8 @@ public AccessTokenResponseDTO getGoogleToken(String code) { decodedCode = code; } + String redirectUri = "deploy".equalsIgnoreCase(type) ? deployRedirectUri : localRedirectUri; + // ... (실제 Google OAuth 2.0 /token 엔드포인트 통신 로직 구현 필요) // HTTP Body에 전송할 파라미터 담기 MultiValueMap params = new LinkedMultiValueMap<>(); diff --git a/src/main/java/com/moongeul/backend/api/member/service/KakaoOAuthService.java b/src/main/java/com/moongeul/backend/api/member/service/KakaoOAuthService.java index 2b4d761..93a02c6 100644 --- a/src/main/java/com/moongeul/backend/api/member/service/KakaoOAuthService.java +++ b/src/main/java/com/moongeul/backend/api/member/service/KakaoOAuthService.java @@ -29,17 +29,23 @@ public class KakaoOAuthService { private String clientId; @Value("${spring.security.oauth2.client.registration.kakao.client-secret}") private String clientSecret; - @Value("${spring.security.oauth2.client.registration.kakao.redirect-uri}") - private String redirectUri; + + @Value("${oauth-config.google.local}") + private String localRedirectUri; + @Value("${oauth-config.google.deploy}") + private String deployRedirectUri; // Kakao 토큰 획득 로직 - public AccessTokenResponseDTO getKakaoToken(String code){ + public AccessTokenResponseDTO getKakaoToken(String code, String type){ // HTTP Body 생성 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("grant_type", "authorization_code"); params.add("client_id", clientId); params.add("client_secret", clientSecret); + + String redirectUri = "deploy".equalsIgnoreCase(type) ? deployRedirectUri : localRedirectUri; + params.add("redirect_uri", redirectUri); params.add("code", code); diff --git a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java index cc5b655..94d0e8a 100644 --- a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java +++ b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java @@ -55,10 +55,10 @@ public class MemberService { // 인가코드 받아 JWT로 교환 및 회원가입/로그인 처리 @Transactional - public LoginResponseDTO loginWithGoogle(String code){ + public LoginResponseDTO loginWithGoogle(String code, String type){ // 1. 인가 코드로 Google Access Token 및 사용자 정보 획득 - AccessTokenResponseDTO tokenDTO = googleOAuthService.getGoogleToken(code); + AccessTokenResponseDTO tokenDTO = googleOAuthService.getGoogleToken(code, type); GoogleInfoResponseDTO userInfo = googleOAuthService.getGoogleUserInfo(tokenDTO.getAccessToken()); // 2. 사용자 정보 추출 @@ -89,9 +89,9 @@ public LoginResponseDTO loginWithGoogle(String code){ } @Transactional - public LoginResponseDTO loginWithKakao(String code){ + public LoginResponseDTO loginWithKakao(String code, String type){ - AccessTokenResponseDTO tokenDTO = kakaoOAuthService.getKakaoToken(code); + AccessTokenResponseDTO tokenDTO = kakaoOAuthService.getKakaoToken(code, type); KakaoInfoResponseDTO userInfo = kakaoOAuthService.getKakaoUserInfo(tokenDTO.getAccessToken()); // 2. 사용자 정보 추출 @@ -138,9 +138,8 @@ private Member signUp(String socialId, String email, String name, String picture .socialType(socialType) .role(Role.GUEST) // 이후 필요 정보 모두 입력 시 USER 로 승격 .build(); - Member savedMember = memberRepository.save(newUser); - return savedMember; + return memberRepository.save(newUser); } // 사용자 정보 조회