Study/TIL

[TIL] 07/07 항해99 60일차 - 트러블 슈팅 : 카카오 로그인에서 이메일이 넘어오지 않는 문제

Anna-Jin 2022. 7. 25. 01:38
728x90

 

들어가며

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에 비해 정말 잘 되어있다는 걸 다시금 느끼는 날이었다. 역시 카카오라는 말이 괜한 말이 아닌 것 같다.

 

728x90