사용자정보 가져오기 성공

This commit is contained in:
2025-12-22 23:21:00 +09:00
parent b504ac0f93
commit cb7f468d95
7 changed files with 50 additions and 32 deletions

2
prd/.gitignore vendored
View File

@@ -34,4 +34,4 @@ out/
/.nb-gradle/
### VS Code ###
.vscode/
.vscode/*

View File

@@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletRequest;
import site.ocr.prd.dto.LoginReqDTO;
import site.ocr.prd.dto.LoginResDTO;
import site.ocr.prd.dto.UserInfoInqyReqDTO;
import site.ocr.prd.dto.UserInfoInqyResDTO;
import site.ocr.prd.services.LoginService;
@@ -53,6 +54,10 @@ public class LoginController {
UserInfoInqyReqDTO userInfoInqyRequest = new UserInfoInqyReqDTO();
userInfoInqyRequest.setAccess_token(loginResult.getAccess_token());
UserInfoInqyResDTO userInfoInqyResponse = loginService.getUserInfo(userInfoInqyRequest);
System.out.println("사용자정보 :: " + userInfoInqyResponse.toString());
}

View File

@@ -13,10 +13,13 @@ public class LoginReqDTO {
@JsonProperty("grant_type")
String grant_type; //authorization_code
@JsonProperty("client_id")
String client_id; //앱 REST API 키
@JsonProperty("redirect_uri")
String redirect_uri; //인가코드가 리다이렉트된 uri
@JsonProperty("code")
String code; //인가코드 요청으로 얻은 인가코드
}

View File

@@ -9,19 +9,25 @@ import lombok.ToString;
@ToString
@Getter
@Setter
public class LoginResponseDto {
public class LoginResDTO {
@JsonProperty("token_type")
String token_type; //토큰타입, bearer 고정
@JsonProperty("access_token")
String access_token; //사용자 엑세스 토큰 값
@JsonProperty("id_token")
String id_token; //ID 토큰값, openID connect가 활성화된 경우만 발급
@JsonProperty("expires_in")
Integer expires_in; //엑세스토큰과 id토큰의 만료시간(초))
@JsonProperty("refresh_token")
String refresh_token; //사용자 리프레시 토큰 값
@JsonProperty("refresh_token_expires_in")
Integer refresh_token_expires_in; //리프레시 토큰 만료 시간(초)
String scope; //인증된 사용자의 정보조회 범위, 여러개일 경우 공백으로 구분
}

View File

@@ -11,13 +11,6 @@ import lombok.ToString;
@Setter
public class UserInfoInqyReqDTO {
class Request {
@JsonProperty("access_token")
String access_token;
}
class Properties {
}
}

View File

@@ -1,7 +1,5 @@
package site.ocr.prd.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@@ -10,28 +8,10 @@ import lombok.ToString;
@Getter
@Setter
public class UserInfoInqyResDTO {
class Response {
@JsonProperty("id")
String id;
@JsonProperty("properties")
KakaoAccount account;
}
class KakaoAccount {
PropertiesKeys keys;
}
class PropertiesKeys {
String profile;
String name;
String email;
String age_range;
String birthday;
String gender;
}
}

View File

@@ -1,13 +1,19 @@
package site.ocr.prd.services;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.http.HttpHeaders;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import site.ocr.prd.dto.LoginReqDTO;
import site.ocr.prd.dto.LoginResDTO;
import site.ocr.prd.dto.UserInfoInqyReqDTO;
import site.ocr.prd.dto.UserInfoInqyResDTO;
@Service
public class LoginService {
@@ -34,5 +40,30 @@ public class LoginService {
return result;
}
public UserInfoInqyResDTO getUserInfo(UserInfoInqyReqDTO request) {
// 응답 DTO
UserInfoInqyResDTO result = new UserInfoInqyResDTO();
JsonNode root = webClient.get()
.uri("https://kapi.kakao.com/v2/user/me")
.header(HttpHeaders.AUTHORIZATION, "Bearer " + request.getAccess_token())
.retrieve()
.bodyToMono(JsonNode.class)
.block();
//사용자ID
String id = root.path("id").asText();
String name = root.path("name").asText();
String email = root.path("email").asText();
//jsonnode :: {"id":4438121341,"connected_at":"2025-09-09T03:53:23Z"}
System.out.println("jsonnode :: " + root.toString());
result.setId(id);
result.setName(name);
result.setEmail(email);
return result;
}
}