1

我正在使用 spring-social-google(从 gi​​t repo 构建)来允许人们登录我的 Spring MVC 应用程序(我已经有 facebook、twitter 和 linedin 工作)。下面的表格允许我进行身份验证,但不会返回电子邮件地址,并且禁止发布到 Google+ 时间线:

<form action="<c:url value="/register/social/${providerId}" />" method="POST" id ="${providerId}Form" name = "${providerId}Form">
    <button type="submit"><img src="<c:url value='/resources/${providerId}/sign-in-with-${providerId}.png'/>" border="0"/></button>
    <input type="hidden" name="scope" value="https://www.googleapis.com/auth/plus.profile.emails.read" />                   
</form>

我认为问题在于我没有正确的范围变量。我在这里尝试了一些组合https://developers.google.com/+/api/oauth但我被告知范围变量都是错误的。我需要哪些?

这是我用来获取电子邮件地址的代码:

public final class LoginConnectionSignUp implements ConnectionSignUp 
{   
    public String execute(Connection<?> connection) 
    {
        final UserProfile up = connection.fetchUserProfile();
        final String email = up.getEmail();
        // ...
    }

}
4

1 回答 1

2

这里有几个问题:

Google 的 API 目前不支持发布到 Google+ 信息流。该软件包似乎允许您创建“应用活动时刻”,这些时刻存储在用户的个人资料中......但这些不是发布到流中的。为了生成应用活动,您需要包含https://www.googleapis.com/auth/plus.login范围。

此外,您可以包括email范围或https://www.googleapis.com/auth/plus.profile.emails.read范围。使用这些范围,您应该能够获取电子邮件地址作为调用的一部分

Person person = google.plusOperations().getPerson("me");

所以你的输入标签可能看起来像

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read" />                   

(注意要使用的两个范围之间的空间)。

重要说明:文档谈到通过电话获取电子邮件,例如

GoogleUserInfo userInfo = google.userOperations().getUserInfo();

虽然现在这可能有效,但它已被弃用,并计划在 9 月被删除。userinfo 范围也被设置为在这个时候被弃用。不要使用此方法或这些范围。(并联系作者告诉他们弃用它。)

于 2014-05-20T18:54:03.697 回答