반응형
들어가며
spring security + jwt + OAuth2.0 조합은 정말 쉽지가 않다. 특히 security랑 jwt가 가장 어렵다..!!
오늘의 TIL은 소셜 로그인을 구현하면서 겪었던 트러블 슈팅을 작성해보고자 한다!
트러블 슈팅
문제 - 카카오 로그인에서 이메일이 넘어오지 않는 문제
카카오로 로그인을 시도했을 때, 이메일이 넘어오지 않아 DB에 default 값인 NO_EMAIL
이 들어오고 있었다.
디버깅을 돌려보니 kakaoOAuth2UserInfo
클래스에서 getEmail()
메소드로 이메일을 불러올 때 이메일을 받아오고 있지 못해서 생기는 문제였는데, 해당 메소드의 코드를 보면 key값이 kakao가 제공하는 response의 key값과 다르다.
문제의 코드
@Override
public String getEmail() {
return (String) attributes.get("account_email");
}
kakao response 예시
HTTP/1.1 200 OK
{
"id":123456789,
"kakao_account": {
"profile_needs_agreement": false,
"profile": {
"nickname": "홍길동",
"thumbnail_image_url": "http://yyy.kakao.com/.../img_110x110.jpg",
"profile_image_url": "http://yyy.kakao.com/dn/.../img_640x640.jpg",
"is_default_image":false
},
"name_needs_agreement":false,
"name":"홍길동",
"email_needs_agreement":false,
"is_email_valid": true,
"is_email_verified": true,
"email": "sample@sample.com",
"age_range_needs_agreement":false,
"age_range":"20~29",
"birthday_needs_agreement":false,
"birthday":"1130",
"gender_needs_agreement":false,
"gender":"female"
},
"properties":{
"${CUSTOM_PROPERTY_KEY}": "${CUSTOM_PROPERTY_VALUE}",
...
}
}
여기서 email 값을 가져오고 싶다면 key값이 kakao_acount.email
가 되어야 한다.
이 내용은 kakao developers 문서의 카카오 로그인 - REST API -사용자 정보 가져오기에서 확인할 수 있다.
최종적으로 수정된 코드는 다음과 같다
@Override
public String getEmail() {
Map<String,Object> kakaoAccount = (Map<String,Object>) attributes.get("kakao_account");
if (kakaoAccount == null) {
return null;
}
return (String) kakaoAccount.get("email");
}
마치며
카카오 api 문서가 다른 api에 비해 정말 잘 되어있다는 걸 다시금 느끼는 날이었다. 역시 카카오라는 말이 괜한 말이 아닌 것 같다.
반응형
'Study > TIL' 카테고리의 다른 글
[TIL] 07/15 항해99 68일차 - 트러블 슈팅 : JWT 401에러 보내기 (0) | 2022.07.26 |
---|---|
[TIL] 07/10 항해99 63일차 - postman에서 cookie 사용하기 (1) | 2022.07.25 |
[회고록] 06/25 항해99 48일차 (1) | 2022.06.26 |
[회고록] 06/24 항해99 47일차 (0) | 2022.06.26 |
[TIL] 06/23 항해99 46일차 - 실전프로젝트 D-1, 해결하지 못한 부분들 (0) | 2022.06.24 |