2016-07-22 3 views
1

Я пытаюсь найти рабочий пример для входа в систему с использованием OAuth2 от Google, а затем запросить информацию пользователя (например, имя и/или адрес электронной почты). Это, насколько мне удалось зайти так далеко:Получение адреса электронной почты пользователя, заверенного OAuth2

InputStream in = Application.class.getResourceAsStream("/client_secret.json"); 
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(), new InputStreamReader(in)); 

// Build flow and trigger user authorization request. 
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    GoogleNetHttpTransport.newTrustedTransport(), 
    JacksonFactory.getDefaultInstance(), 
    clientSecrets, 
    Arrays.asList(
     PeopleScopes.USERINFO_PROFILE 
    ) 
) 
    .setAccessType("offline") 
    .build(); 


GoogleTokenResponse response = flow 
    .newTokenRequest(code) 
    .setRedirectUri("http://example.com/oauth2callback") 
    .execute(); 

Credential credential = flow.createAndStoreCredential(response, null); 
Gmail service = new Gmail.Builder(GoogleNetHttpTransport.newTrustedTransport(), 
    JacksonFactory.getDefaultInstance(), 
    credential 
) 
    .setApplicationName("My App") 
    .build(); 

Oauth2 oauth2 = new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential) 
    .setApplicationName("My App") 
    .build(); 
Userinfoplus userinfo = oauth2.userinfo().get().execute(); 
System.out.print(userinfo.toPrettyString()); 

И работает отлично, за исключением того факта, что возвращаемая информация о пользователе не имеет мою электронную почту в нем! Печататься информация являются:

{ 
    "family_name" : "...", 
    "gender" : "...", 
    "given_name" : "...", 
    "id" : "...", 
    "link" : "https://plus.google.com/+...", 
    "locale" : "en-GB", 
    "name" : "... ...", 
    "picture" : "https://.../photo.jpg" 
} 

Но я ищу для электронной почты пользователя (тот, что он/она используется для входа в систему). Как я могу получить адрес электронной почты пользователя?

BTW, если вам интересно; PeopleScopes.USERINFO_PROFILE является:

https://www.googleapis.com/auth/userinfo.profile 

ответ

0

я нашел его, он должен быть:

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    GoogleNetHttpTransport.newTrustedTransport(), 
    JacksonFactory.getDefaultInstance(), 
    clientSecrets, 
    Arrays.asList(
     PeopleScopes.USERINFO_PROFILE, 
     PeopleScopes.USERINFO_EMAIL 
    ) 
) 

И PeopleScopes.USERINFO_EMAIL обозначает:

https://www.googleapis.com/auth/userinfo.email 

Теперь userinfo попавшего адрес электронной почты тоже.

Смежные вопросы