我使用spring-social-google(由git 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();
// ...
}
}
答案 0 :(得分:2)
这里有几个问题:
Google的API目前不支持发布到Google+信息流。该软件包似乎可以让您创建“app活动时刻”,这些时刻存储在用户的个人资料中......但这些不是发布到该流的帖子。要生成应用活动,您需要包含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范围也设置为此时被删除。 不要使用此方法或这些范围。(并联系作者告诉他们弃用它。)