zcbm7008 / artistry

atristry backend project
0 stars 0 forks source link

OAuth 인증 구현을 리팩토링한다. #32

Open zcbm7008 opened 1 month ago

zcbm7008 commented 1 month ago

트러블슈팅

Client가 너무 많은 기능을 수행중

@Override
public TokenResponse getAccessToken(String code) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

    MultiValueMap<String, String> params = generateRequestParams(code);
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);

    ResponseEntity<TokenResponse> responseEntity = restTemplate.postForEntity(tokenUri, request, TokenResponse.class);
    return responseEntity.getBody();
}

EndPoint가 생성한 code를 받아 AccessToken을 가져옴.

public NaverUserResponse getOauthProfile(String accessToken) throws JsonProcessingException {
    HttpHeaders httpHeaders = createAccessHeaders(accessToken);
    HttpEntity<?> request = new HttpEntity<>(httpHeaders);

    ResponseEntity<String> response = restTemplate.exchange(NAVER_PROFILE_URL, HttpMethod.GET, request, String.class);
    checkStatusCode(response);

    return parseJsonToResponse(response.getBody());
}

받은 AccessToken을 사용하여 유저의 profile 정보 요청을 보냄.

private NaverUserResponse parseJsonToResponse(String json) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode rootNode = objectMapper.readTree(json).path("response");;

    return objectMapper.treeToValue(rootNode, NaverUserResponse.class);
}

정보 요청을 받아와서 UserResponse로 파싱함.

@Override
public OAuthMemberRequest createOAuthMemberRequest(final TokenResponse tokenResponse) throws JsonProcessingException {
    NaverUserResponse naverUserResponse = getOauthProfile(tokenResponse.getAccess_token());

    return new OAuthMemberRequest(naverUserResponse.getNickname(),naverUserResponse.getEmail(),naverUserResponse.getProfile_image());
}

OAuth 요청을 보내 유저 profile을 받고 Request를 생성해 Response로 리턴함.

고려사항

code -> AccessCode를 받은 기능은 다른 클래스로 분리