문제
- 카카오 로그인 기능 강의를 보면서 이와 마찬가지로 네이버 로그인도 구현해보기 위해서 같은 코드를 사용해보기로 하였다. 사용하는 도중에 생겼던 것들과 다른 문제가 있었는데 이를 기록해보고자 한다.
- 문제는 토큰을 받아오는 메서드에서 제대로 토큰을 받아오지 못하는 문제였다.
- 해당 메서드는 getToken 메서드인데 이 부분에서 카카오와 다른 점이 무엇인지 한번 확인해보았다.
시도
- getToken에서 HTTP Body 생성을 위해서 MultiValueMap<String, String> body = new LinkedMultiValueMap<>(); 를 만들었고 카카오에서는 거기에 다음과 같은 코드들을 add 해주었다. body.add("grant_type", "authorization_code");
body.add("client_id", "내 클라이언트 Id");
body.add("redirect_uri", "callback으로 지정한 uri");
body.add("code", code);
- 하지만 네이버는 다음과 같이 코드를 작성해야만 했었다.
body.add("grant_type", "authorization_code");
body.add("client_id", "내 클라이언트 Id");
body.add("client_secret", "내 클라이언트 키");
body.add("redirect_uri", "callback으로 지정한 uri");
body.add("code", code);
body.add("state", "test");
- 해당 부분의 state 같은 경우는 내가 설정한 임의의 String 값인데, 이 부분이 naver api에 나와있지 않아서 검색을 해서 알아냈다.
- 또한 처음에는 client_id가 아니라 X-Naver-Client-Id로 key를 지정하고 클라이언트 아이디를 value로 주었는데 그렇게 하니 제대로 client_id를 받아오지 못했고, 이를 혹시나 해서 client_id로 지정하자 제대로 받아오는 것을 확인할 수 있었다.
- client_secret 또한 처음에는 X-Naver-Client-Secret으로 등록하였다가 바꾸어주었다.
해결
- 처음에는 해당 문제들에 대한 에러메시지가 제대로 나오지 않고, JsonNode의 문제다, token 문제다 라면서 에러메시지가 나왔는데, 일일히 sout을 통해서 확인해본 결과 전혀 다른 문제였다는 것을 알게 되었다.
- 결론 : sout으로 제대로 찍어보던가, 디버깅을 해보던가 -> 디버깅이 중요하다.
아주 유용한 정보네요!