Google OAuth2 API v2 userinfo始终为电子邮件返回null

时间:2017-07-26 08:48:34

标签: java oauth-2.0 google-api

我试图获取经过身份验证的用户的电子邮件地址。

我已经使用范围进行了身份验证

email
profile
https://www.googleapis.com/auth/plus.login
https://www.googleapis.com/plus/v1/people/me
https://www.googleapis.com/auth/userinfo.email

此调用对电子邮件返回null,但填充了名称,链接,图片等:

Userinfoplus userinfo2 = oauth2.userinfo().v2().me().get().execute();
log.info(userinfo2.toString());

输出:

{
  "family_name" : "Homlish",
  "gender" : "male",
  "given_name" : "Paul",
  "id" : "107004799409225320539",
  "link" : "https://plus.google.com/107004799409225320539",
  "locale" : "en",
  "name" : "Paul Homlish",
  "picture" : "https://lh4.googleusercontent.com/-bCRlXUqr__E/AAAAAAAAAAI/AAAAAAAABR8/LQCliyz_jgI/photo.jpg"
} 

检查我可以看到一个电子邮件字段,但它是空的。

我缺少什么想法?

虽然我使用的范围不会提示用户提供额外的权限,但是我可以删除任何不需要的范围吗?

谢谢, 保罗

1 个答案:

答案 0 :(得分:1)

通过将范围设置为'电子邮件',进行身份验证,并使用com.google.api.client.googleapis.auth.oauth2.GoogleCredential和com.google.api.services.oauth2.Oauth2我能够接收电子邮件:

        GoogleCredential credential = new GoogleCredential().setAccessToken(tokenFromAuthentication); 
        Oauth2 oauth2 = new Oauth2.Builder(new NetHttpTransport(), new JacksonFactory(), credential)
                .setApplicationName("Oauth2")
                .build();
        Userinfoplus userinfo = oauth2.userinfo().get().execute();