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..2221897 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.refreshToken()); // 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.refreshToken()); } 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,8 @@ 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()); + System.out.println(kakaoToken.access_token()); //연결 삭제 Long id = kakaoClient.unlinkUser(kakaoToken.access_token()); if(id==null){ @@ -169,8 +169,6 @@ public void withdrawal(Member member) { memberRepository.delete(member); - // Response - } @Transactional public TokenDto reissue(String token, Member member) { 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 + ) { }