Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion src/main/java/com/rudolph/Weevo/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.rudolph.Weevo.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -19,11 +21,22 @@

@Slf4j
@Service
@RequiredArgsConstructor
//@RequiredArgsConstructor
public class AuthService {

private final MemberService memberService;
private final MemberRepository memberRepository;
private final RestTemplate restTemplate;

@Value("${KAKAO_ADMIN_KEY}")
private String kakaoAdminKey;

public AuthService(MemberService memberService, MemberRepository memberRepository, RestTemplateBuilder restTemplateBuilder) {
this.memberService = memberService;
this.memberRepository = memberRepository;
this.restTemplate = restTemplateBuilder.build();
}


@Transactional
public void logout(CustomUserPrincipal principal, String accessToken) {
Expand Down Expand Up @@ -66,6 +79,7 @@ public String deleteMember(CustomUserPrincipal principal) {
Member member = memberService.findMember(principal.getMemberId());
String provider = member.getProvider();
log.info(provider);
unlinkKakaoUser(member.getProviderId());
memberRepository.deleteById(member.getId());
return "회원탈퇴 성공";
} catch (Exception e) {
Expand All @@ -74,6 +88,7 @@ public String deleteMember(CustomUserPrincipal principal) {
}
}

// 회원탈퇴 - kakao access token 으로 수행하는 방법
// @Transactional
// public String deleteMember(CustomUserPrincipal principal, String accessToken) {
// try {
Expand Down Expand Up @@ -143,4 +158,28 @@ public String deleteMember(CustomUserPrincipal principal) {
// throw new GeneralException(ErrorStatus._INTERNAL_SERVER_ERROR);
// }
// }

// 카카오 unlink adminKey로 수행하기
public String unlinkKakaoUser(String userId) {
String url = "https://kapi.kakao.com/v1/user/unlink";
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "KakaoAK " + kakaoAdminKey);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("target_id_type", "user_id");
params.add("target_id", userId);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);

if(response.getStatusCode() == HttpStatus.OK) {
log.info("카카오 연결 해제 성공: {}", response.getBody());
return "카카오 연결 해제 성공";
}else {
log.warn("카카오 연결 해제 실패: {} / 응답: {}", response.getStatusCode(), response.getBody());
return "카카오 연결 해제 실패: " + response.getStatusCode();
}
}
}