깃허브는 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");
}
}