目前,我只想根据用户的凭据知道用户的电子邮件。
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);
我对查看有关您帐户的基本信息(https://www.googleapis.com/auth/userinfo.profile)不感兴趣。但是,如果我删除userinfo.profile
,则getUserInfo
将始终返回null。
有没有办法进一步缩小范围?
答案 0 :(得分:1)
您似乎在使用已弃用的scopes
。 (见这里:https://developers.google.com/+/api/oauth#login-scopes)
您可能想尝试更新的。您也可以在Google的OAuth2游乐场进行测试:https://developers.google.com/oauthplayground/
似乎仅email
作为scope
正常工作,但似乎也包含profile
(非常常见的BTW)。