2. 스프링 시큐리티 [깃허브 OAuth 로그인 이슈]

dasd412·2022년 1월 31일
0

포트폴리오

목록 보기
18/41

원인

깃허브는 google, facebook과 다르게 이메일을 “반드시” 제공하지는 않는다.

위의 깃허브 프로필을 보면, 사용자가 이메일 제공 거부로 설정해놨을 경우, oauth 요청을 해도 email이 null로 온다.

모든 사용자가 이메일 제공 동의를 했을리도 없는데, 내 api는 이메일의 유일성이 필요하다.

해결책

깃 허브가 제공하는 정보 중, 유일한 값을 찾아보면 ‘id’라는 것이 있다.

만약 이메일 동의를 안할 경우에는 null이 오므로 id@github.com이라는 가상의 이메일을 만든다.

null이 아니면 그대로 이메일을 가져다 쓰면 된다.

public class GitHubUserInfo implements OAuth2UserInfo {

    private Map<String, Object> attributes;

    @Override
    public String getEmail() {
        int id = (int) attributes.get("id");
        return attributes.get("email") == null ? id + "@github.com" : (String) attributes.get("email");
    }
}
profile
아키텍쳐 설계와 테스트 코드에 관심이 많음.

0개의 댓글