如何在不请求范围userinfo.profile的情况下访问用户电子邮件信息

时间:2014-04-19 19:35:01

标签: oauth-2.0 google-api google-oauth google-api-java-client

目前,我只想根据用户的凭据知道用户的电子邮件。

public static Userinfoplus getUserInfo(Credential credentials)
{
    Oauth2 userInfoService =
        new Oauth2.Builder(httpTransport, JSON_FACTORY, credentials).setApplicationName("JStock").build();
    Userinfoplus userInfo = null;
    try {
        userInfo = userInfoService.userinfo().get().execute();
    } catch (IOException e) {
        System.err.println("An error occurred: " + e);
    }
    if (userInfo != null && userInfo.getId() != null) {
        return userInfo;
    } else {
        return null;
    }
}

System.out.println(getUserInfo(credential).getEmail());

但是,为了使上述代码有效,我还需要包含https://www.googleapis.com/auth/userinfo.profile

Set<String> scopes = new HashSet<String>();
scopes.add("https://www.googleapis.com/auth/userinfo.email");
scopes.add("https://www.googleapis.com/auth/userinfo.profile");
scopes.add(DriveScopes.DRIVE_APPDATA);

enter image description here

我对查看有关您帐户的基本信息https://www.googleapis.com/auth/userinfo.profile)不感兴趣。但是,如果我删除userinfo.profile,则getUserInfo将始终返回null。

有没有办法进一步缩小范围?

1 个答案:

答案 0 :(得分:1)

您似乎在使用已弃用的scopes。 (见这里:https://developers.google.com/+/api/oauth#login-scopes

您可能想尝试更新的。您也可以在Google的OAuth2游乐场进行测试:https://developers.google.com/oauthplayground/

似乎仅email作为scope正常工作,但似乎也包含profile(非常常见的BTW)。