diff --git a/.deploy/Dockerfile b/.deploy/Dockerfile index 1f27dca..cff7ce0 100644 --- a/.deploy/Dockerfile +++ b/.deploy/Dockerfile @@ -9,6 +9,7 @@ ARG JWT_EXPIRED_IN ARG REFRESH_TOKEN_EXPIRED_IN ARG KAKAO_CLIENT_KEY ARG KAKAO_REDIRECT_URL +ARG KAKAO_REDIRECT_URL_TEST # ARG 값을 ENV로 설정하여 런타임에서도 사용 가능하도록 설정 ENV DATASOURCE_URL_LOCAL=$DATASOURCE_URL_LOCAL @@ -19,6 +20,7 @@ ENV JWT_EXPIRED_IN=$JWT_EXPIRED_IN ENV REFRESH_TOKEN_EXPIRED_IN=$REFRESH_TOKEN_EXPIRED_IN ENV KAKAO_CLIENT_KEY=$KAKAO_CLIENT_KEY ENV KAKAO_REDIRECT_URL=$KAKAO_REDIRECT_URL +ENV KAKAO_REDIRECT_URL_TEST=$KAKAO_REDIRECT_URL_TEST # JAR 파일 복사 ARG JAR_FILE=build/libs/*.jar diff --git a/.deploy/neighbors-blue-deploy.yml b/.deploy/neighbors-blue-deploy.yml index 20905e6..f96626e 100644 --- a/.deploy/neighbors-blue-deploy.yml +++ b/.deploy/neighbors-blue-deploy.yml @@ -21,6 +21,7 @@ services: - REFRESH_TOKEN_EXPIRED_IN=${REFRESH_TOKEN_EXPIRED_IN} - KAKAO_CLIENT_KEY=${KAKAO_CLIENT_KEY} - KAKAO_REDIRECT_URL=${KAKAO_REDIRECT_URL} + - KAKAO_REDIRECT_URL_TEST=${KAKAO_REDIRECT_URL_TEST} networks: app-network: diff --git a/.deploy/neighbors-green-deploy.yml b/.deploy/neighbors-green-deploy.yml index ed3be75..f33cfe1 100644 --- a/.deploy/neighbors-green-deploy.yml +++ b/.deploy/neighbors-green-deploy.yml @@ -21,6 +21,7 @@ services: - REFRESH_TOKEN_EXPIRED_IN=${REFRESH_TOKEN_EXPIRED_IN} - KAKAO_CLIENT_KEY=${KAKAO_CLIENT_KEY} - KAKAO_REDIRECT_URL=${KAKAO_REDIRECT_URL} + - KAKAO_REDIRECT_URL_TEST=${KAKAO_REDIRECT_URL_TEST} networks: app-network: diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 4161d02..cb5dc39 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -18,6 +18,7 @@ jobs: REFRESH_TOKEN_EXPIRED_IN: ${{ secrets.REFRESH_TOKEN_EXPIRED_IN }} KAKAO_CLIENT_KEY: ${{ secrets.KAKAO_CLIENT_KEY }} KAKAO_REDIRECT_URL: ${{ secrets.KAKAO_REDIRECT_URL }} + KAKAO_REDIRECT_URL_TEST: ${{ secrets.KAKAO_REDIRECT_URL_TEST }} steps: @@ -67,6 +68,7 @@ jobs: --build-arg REFRESH_TOKEN_EXPIRED_IN=${{ secrets.REFRESH_TOKEN_EXPIRED_IN }} \ --build-arg KAKAO_CLIENT_KEY=${{ secrets.KAKAO_CLIENT_KEY }} \ --build-arg KAKAO_REDIRECT_URL=${{ secrets.KAKAO_REDIRECT_URL }} \ + --build-arg KAKAO_REDIRECT_URL_TEST=${{ secrets.KAKAO_REDIRECT_URL_TEST }} \ --platform linux/amd64 \ -f ./.deploy/Dockerfile \ -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }} . @@ -107,6 +109,7 @@ jobs: echo "REFRESH_TOKEN_EXPIRED_IN=${{ secrets.REFRESH_TOKEN_EXPIRED_IN }}" >> ./.env echo "KAKAO_CLIENT_KEY=${{ secrets.KAKAO_CLIENT_KEY }}" >> ./.env echo "KAKAO_REDIRECT_URL=${{ secrets.KAKAO_REDIRECT_URL }}" >> ./.env + echo "KAKAO_REDIRECT_URL_TEST=${{ secrets.KAKAO_REDIRECT_URL_TEST }}" >> ./.env chmod +x deploy.sh source deploy.sh diff --git a/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java index 0aff264..63fe845 100644 --- a/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java +++ b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java @@ -15,6 +15,7 @@ import com.neighbors.tohero.domain.login.service.oauth.kakao.RequestKakaoInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Slf4j @@ -26,9 +27,24 @@ public class OAuthService { private final CreateUser createUser; private final JwtProvider jwtProvider; + @Value("${oauth.kakao.redirect-uri}") + private String redirect_uri; + + @Value("${oauth.kakao.redirect-client}") + private String redirect_uri_client; + + public BaseResponse oAuthKaKaoLoin(String code){ - KakaoInfoResponse kakaoInfoResponse = requestUserInfo.requestKakaoInfo(code); + KakaoInfoResponse kakaoInfoResponse = requestUserInfo.requestKakaoInfo(code, redirect_uri); + return afterAuthorizedOauth(kakaoInfoResponse); + } + + public BaseResponse oAuthKaKaoLoinLocal(String code){ + KakaoInfoResponse kakaoInfoResponse = requestUserInfo.requestKakaoInfo(code, redirect_uri_client); + return afterAuthorizedOauth(kakaoInfoResponse); + } + private BaseResponse afterAuthorizedOauth(KakaoInfoResponse kakaoInfoResponse){ User user = User.builder() .userName(kakaoInfoResponse.getNickname()) .email(kakaoInfoResponse.getEmail()) diff --git a/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java b/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java index cc6f870..d12da1d 100644 --- a/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java +++ b/src/main/java/com/neighbors/tohero/domain/login/service/oauth/kakao/RequestKakaoInfo.java @@ -25,28 +25,20 @@ public class RequestKakaoInfo { @Value("${oauth.kakao.client-key}") private String clientKey; - @Value("${oauth.kakao.redirect-uri}") - private String redirect_uri; - private final RestTemplate restTemplate; - public KakaoInfoResponse requestKakaoInfo(String authorizationCode){ - String kakaoAccessToken = requestToken(authorizationCode); + public KakaoInfoResponse requestKakaoInfo(String authorizationCode, String redirect_uri){ + String kakaoAccessToken = requestToken(authorizationCode, redirect_uri); return requestUserInfo(kakaoAccessToken); } - private String requestToken(String code) { + private String requestToken(String code, String redirect_uri) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("grant_type", "authorization_code"); - body.add("client_id", clientKey); - body.add("redirect_uri", redirect_uri); - body.add("code", code); + MultiValueMap body = createRequestBodyWithRedirectUrl(code, redirect_uri); HttpEntity request = new HttpEntity<>(body, httpHeaders); - KakaoTokens response = restTemplate.postForObject(tokenUrl, request, KakaoTokens.class); assert response != null; @@ -65,4 +57,14 @@ private KakaoInfoResponse requestUserInfo(String accessToken){ return restTemplate.postForObject(userInfoUrl, request, KakaoInfoResponse.class); } + + private MultiValueMap createRequestBodyWithRedirectUrl(String code, String redirect_uri){ + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("grant_type", "authorization_code"); + body.add("client_id", clientKey); + body.add("redirect_uri", redirect_uri); + body.add("code", code); + + return body; + } } diff --git a/src/main/java/com/neighbors/tohero/presentation/controller/OAuthController.java b/src/main/java/com/neighbors/tohero/presentation/controller/OAuthController.java index 4682acc..80cc650 100644 --- a/src/main/java/com/neighbors/tohero/presentation/controller/OAuthController.java +++ b/src/main/java/com/neighbors/tohero/presentation/controller/OAuthController.java @@ -14,10 +14,17 @@ public class OAuthController { private final OAuthService oAuthService; - @Operation(summary = "카카오 로그인 API", description = "카카오톡으로 로그인하기 API입니다.") + @Operation(summary = "카카오 로그인 API", description = "카카오톡으로 로그인하기 API입니다. redirect-uri = \"https://glittery-madeleine-215e2f.netlify.app/callback/kakaotalk\"") @GetMapping("/oauth/kakao/callback") public ResponseEntity kakaoLogin(@RequestParam("code") String code) { return ResponseEntity.ok() .body(oAuthService.oAuthKaKaoLoin(code)); } + + @Operation(summary = "카카오 로그인 API", description = "카카오톡으로 로그인하기 API입니다. redirect-uri = \"http://localhost:5173/callback/kakaotalk\"") + @GetMapping("/oauth/kakao/callback2") + public ResponseEntity kakaoLoginLocal(@RequestParam("code") String code) { + return ResponseEntity.ok() + .body(oAuthService.oAuthKaKaoLoinLocal(code)); + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 56caea2..a60c601 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -36,4 +36,5 @@ oauth: token-url: https://kauth.kakao.com/oauth/token userInfo-url: https://kapi.kakao.com/v2/user/me client-key: ${KAKAO_CLIENT_KEY} - redirect-uri: ${KAKAO_REDIRECT_URL} \ No newline at end of file + redirect-uri: ${KAKAO_REDIRECT_URL} + redirect-client: ${KAKAO_REDIRECT_URL_TEST} \ No newline at end of file