From 1ddc71e485529924131415e19e0707d618b1bd71 Mon Sep 17 00:00:00 2001 From: sycuuui <102959791+sycuuui@users.noreply.github.com> Date: Sun, 31 Aug 2025 18:49:35 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#145=20fix:=20=EC=86=8C=EC=85=9C/JWT=20refr?= =?UTF-8?q?eshToken=20=EC=B9=BC=EB=9F=BC=20=EC=83=9D=EC=84=B1=20=EB=B0=8F?= =?UTF-8?q?=20=EB=AA=A9=EC=A0=81=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20=EC=9E=AC=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Together/domain/member/dto/LoginReq.java | 2 +- .../Together/domain/member/entity/Member.java | 8 +++++-- .../domain/member/service/AuthService.java | 21 ++++++++----------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/Journey/Together/domain/member/dto/LoginReq.java b/src/main/java/Journey/Together/domain/member/dto/LoginReq.java index 1b6d34e..60844c9 100644 --- a/src/main/java/Journey/Together/domain/member/dto/LoginReq.java +++ b/src/main/java/Journey/Together/domain/member/dto/LoginReq.java @@ -1,5 +1,5 @@ package Journey.Together.domain.member.dto; public record LoginReq( - String refreshToken + String socialRefreshToken ) { } diff --git a/src/main/java/Journey/Together/domain/member/entity/Member.java b/src/main/java/Journey/Together/domain/member/entity/Member.java index 168835d..940ea30 100644 --- a/src/main/java/Journey/Together/domain/member/entity/Member.java +++ b/src/main/java/Journey/Together/domain/member/entity/Member.java @@ -76,8 +76,11 @@ public class Member extends BaseTimeEntity { @Column(name = "refreshToken", columnDefinition = "varchar(255)") private String refreshToken; + @Column(name = "social_refreshToken", columnDefinition = "varchar(255)") + private String socialRefreshToken; + @Builder - public Member(String email, String name,String nickname, String phone, String profileUuid, LoginType loginType,String bloodType,MemberType memberType, String birth, String allergy, String medication,String part1Rel,String part1Phone,String part2Rel,String part2Phone, String refreshToken) { + public Member(String email, String name,String nickname, String phone, String profileUuid, LoginType loginType,String bloodType,MemberType memberType, String birth, String allergy, String medication,String part1Rel,String part1Phone,String part2Rel,String part2Phone, String refreshToken, String socialRefreshToken) { this.email = email; this.name = name; this.nickname=nickname; @@ -93,6 +96,7 @@ public Member(String email, String name,String nickname, String phone, String pr this.part1Phone=part1Phone; this.part2Rel=part2Rel; this.part2Phone=part2Phone; - this.refreshToken=refreshToken; + this.refreshToken = refreshToken; + this.socialRefreshToken=socialRefreshToken; } } diff --git a/src/main/java/Journey/Together/domain/member/service/AuthService.java b/src/main/java/Journey/Together/domain/member/service/AuthService.java index 8e42123..5044ac5 100644 --- a/src/main/java/Journey/Together/domain/member/service/AuthService.java +++ b/src/main/java/Journey/Together/domain/member/service/AuthService.java @@ -11,11 +11,10 @@ import Journey.Together.global.common.CustomMultipartFile; import Journey.Together.global.exception.ApplicationException; import Journey.Together.global.exception.ErrorCode; -import Journey.Together.global.exception.ErrorResponse; -import Journey.Together.global.security.kakao.KakaoClient; -import Journey.Together.global.security.kakao.dto.KakaoProfile; import Journey.Together.global.security.jwt.TokenProvider; import Journey.Together.global.security.jwt.dto.TokenDto; +import Journey.Together.global.security.kakao.KakaoClient; +import Journey.Together.global.security.kakao.dto.KakaoProfile; import Journey.Together.global.security.kakao.dto.KakaoToken; import Journey.Together.global.security.naver.dto.NaverDeleteResponse; import Journey.Together.global.security.naver.dto.NaverProperties; @@ -26,14 +25,11 @@ import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -90,7 +86,8 @@ public LoginRes signIn(String token, String type, LoginReq loginReq) throws IOEx interestRepository.save(interest); } tokenDto = tokenProvider.createToken(member); - member.setRefreshToken(loginReq.refreshToken()); + member.setRefreshToken(tokenDto.refreshToken()); + member.setSocialRefreshToken(loginReq.socialRefreshToken()); // Response return LoginRes.of(member, tokenDto); @@ -126,7 +123,8 @@ public LoginRes signIn(String token, String type, LoginReq loginReq) throws IOEx } tokenDto = tokenProvider.createToken(member); - member.setRefreshToken(loginReq.refreshToken()); + member.setRefreshToken(tokenDto.refreshToken()); + member.setSocialRefreshToken(loginReq.socialRefreshToken()); } return LoginRes.of(member, tokenDto); } @@ -138,6 +136,7 @@ public void signOut(String token, Member member) { // Business Logic - Refresh Token 삭제 및 Access Token 블랙리스트 등록 tokenProvider.getExpiration(accessToken); + member.setSocialRefreshToken(null); member.setRefreshToken(null); // Response @@ -149,7 +148,7 @@ public void withdrawal(Member member) { // Business Logic - 회원 논리적 삭제 진행 if(member.getLoginType().equals(LoginType.NAVER)) { - NaverTokenResponse tokenResponse = toRequestToken(member.getRefreshToken()); + NaverTokenResponse tokenResponse = toRequestToken(member.getSocialRefreshToken()); if(tokenResponse.getError() != null){ throw new ApplicationException(ErrorCode.NAVER_REFRESH_ERROR); } @@ -159,7 +158,7 @@ public void withdrawal(Member member) { } }else if(member.getLoginType().equals(LoginType.KAKAO)) { //accessToken 요청 - KakaoToken kakaoToken = kakaoClient.getKakaoAccessToken(member.getRefreshToken()); + KakaoToken kakaoToken = kakaoClient.getKakaoAccessToken(member.getSocialRefreshToken()); //연결 삭제 Long id = kakaoClient.unlinkUser(kakaoToken.access_token()); if(id==null){ @@ -169,8 +168,6 @@ public void withdrawal(Member member) { memberRepository.delete(member); - // Response - } @Transactional public TokenDto reissue(String token, Member member) { From c69496743aee19b03fd17abfd3248c08745e261e Mon Sep 17 00:00:00 2001 From: sycuuui <102959791+sycuuui@users.noreply.github.com> Date: Sun, 31 Aug 2025 19:30:24 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#145=20fix:=20LoginReq=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=AA=85=20=EC=9E=AC=EC=A0=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Journey/Together/domain/member/dto/LoginReq.java | 2 +- .../Journey/Together/domain/member/service/AuthService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/Journey/Together/domain/member/dto/LoginReq.java b/src/main/java/Journey/Together/domain/member/dto/LoginReq.java index 60844c9..1b6d34e 100644 --- a/src/main/java/Journey/Together/domain/member/dto/LoginReq.java +++ b/src/main/java/Journey/Together/domain/member/dto/LoginReq.java @@ -1,5 +1,5 @@ package Journey.Together.domain.member.dto; public record LoginReq( - String socialRefreshToken + String refreshToken ) { } diff --git a/src/main/java/Journey/Together/domain/member/service/AuthService.java b/src/main/java/Journey/Together/domain/member/service/AuthService.java index 5044ac5..dab1068 100644 --- a/src/main/java/Journey/Together/domain/member/service/AuthService.java +++ b/src/main/java/Journey/Together/domain/member/service/AuthService.java @@ -87,7 +87,7 @@ public LoginRes signIn(String token, String type, LoginReq loginReq) throws IOEx } tokenDto = tokenProvider.createToken(member); member.setRefreshToken(tokenDto.refreshToken()); - member.setSocialRefreshToken(loginReq.socialRefreshToken()); + member.setSocialRefreshToken(loginReq.refreshToken()); // Response return LoginRes.of(member, tokenDto); @@ -124,7 +124,7 @@ public LoginRes signIn(String token, String type, LoginReq loginReq) throws IOEx tokenDto = tokenProvider.createToken(member); member.setRefreshToken(tokenDto.refreshToken()); - member.setSocialRefreshToken(loginReq.socialRefreshToken()); + member.setSocialRefreshToken(loginReq.refreshToken()); } return LoginRes.of(member, tokenDto); } From 29294aefd5d478fbb8a1b82cec02e3b53740c794 Mon Sep 17 00:00:00 2001 From: sycuuui <102959791+sycuuui@users.noreply.github.com> Date: Sun, 31 Aug 2025 19:49:16 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#145=20fix:=20kakao=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=9D=91=EB=8B=B5=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Together/domain/member/service/AuthService.java | 1 + .../Together/global/security/kakao/KakaoClient.java | 8 ++++---- .../Together/global/security/kakao/dto/KakaoToken.java | 9 +++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/Journey/Together/domain/member/service/AuthService.java b/src/main/java/Journey/Together/domain/member/service/AuthService.java index dab1068..2221897 100644 --- a/src/main/java/Journey/Together/domain/member/service/AuthService.java +++ b/src/main/java/Journey/Together/domain/member/service/AuthService.java @@ -159,6 +159,7 @@ public void withdrawal(Member member) { }else if(member.getLoginType().equals(LoginType.KAKAO)) { //accessToken 요청 KakaoToken kakaoToken = kakaoClient.getKakaoAccessToken(member.getSocialRefreshToken()); + System.out.println(kakaoToken.access_token()); //연결 삭제 Long id = kakaoClient.unlinkUser(kakaoToken.access_token()); if(id==null){ diff --git a/src/main/java/Journey/Together/global/security/kakao/KakaoClient.java b/src/main/java/Journey/Together/global/security/kakao/KakaoClient.java index 9a6abd5..cd27c71 100644 --- a/src/main/java/Journey/Together/global/security/kakao/KakaoClient.java +++ b/src/main/java/Journey/Together/global/security/kakao/KakaoClient.java @@ -53,12 +53,12 @@ public KakaoToken getKakaoAccessToken(String refresh_token) { params.add("grant_type", "refresh_token"); params.add("client_id", kakaoClientId); params.add("refresh_token", refresh_token); - params.add("client_secret", kakaoClientSecret); +// params.add("client_secret", kakaoClientSecret); // 요청 보내기 및 응답 수신 String response = webClient.post() .uri(kakaoTokenUri) - .header("Content-type", "application/x-www-form-urlencoded") + .header("Content-type", "application/x-www-form-urlencoded;charset=utf-8") .body(BodyInserters.fromFormData(params)) .retrieve() // 데이터 받는 방식, 스프링에서는 exchange는 메모리 누수 가능성 때문에 retrieve 권장 .bodyToMono(String.class) // (Mono는 단일 데이터, Flux는 복수 데이터) @@ -76,14 +76,14 @@ public KakaoToken getKakaoAccessToken(String refresh_token) { return kakaoToken; } - public KakaoProfile getMemberInfo(String accesToken) { + public KakaoProfile getMemberInfo(String accessToken) { // 요청 기본 객체 생성 WebClient webClient = WebClient.create(kakaoUserInfoUri); // 요청 보내서 응답 받기 String response = webClient.post() .uri(kakaoUserInfoUri) .header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") - .header("Authorization", accesToken) + .header("Authorization", accessToken) .retrieve() .bodyToMono(String.class) .block(); diff --git a/src/main/java/Journey/Together/global/security/kakao/dto/KakaoToken.java b/src/main/java/Journey/Together/global/security/kakao/dto/KakaoToken.java index eaa1eb2..caa980e 100644 --- a/src/main/java/Journey/Together/global/security/kakao/dto/KakaoToken.java +++ b/src/main/java/Journey/Together/global/security/kakao/dto/KakaoToken.java @@ -4,11 +4,12 @@ @Builder public record KakaoToken( - String access_token, - String refresh_token, String token_type, + String access_token, + String id_token, Integer expires_in, - Integer refresh_token_expires_in, - String scope + String refresh_token, + Integer refresh_token_expires_in + ) { }