我正在使用Spring社交Facebook框架2.0.2,我正在访问Facebook应用程序版本2.5。
我,不知何故,无法获取通过fetchObject方法进行身份验证的用户的电子邮件地址。
@RequestMapping("/register/facebook")
public String registerFacebookUser(WebRequest request, Model model) {
Connection<Facebook> connection = (Connection<Facebook>)providerSignInUtils.getConnectionFromSession(request);
User profile = connection.getApi().fetchObject("me", User.class, "id", "first_name", "last_name", "link", "email");
userConnectionRepository.createConnectionRepository(profile.getId()).addConnection(connection);
return "register";
}
Id,名字和姓氏完美无缺,但电子邮件地址似乎为空。我已经在Facebook注册了一个电子邮件地址,并且已经过正确验证,但是可以公开发布。
我的第一个猜测是,当我查看代码时,Spring社交Facebook使用的版本是2.3。你觉得那可能是那个吗?
答案 0 :(得分:1)
UserOperations userOperations = facebook.userOperations();
String [] fields = { "id", "email", "first_name", "last_name" };
org.springframework.social.facebook.api.User profile = facebook.fetchObject
("me", org.springframework.social.facebook.api.User.class, fields);
答案 1 :(得分:0)
我正在回答我的问题,因为我找到了我所缺少的东西。
您实际上需要在登录表单中的隐藏输入中提供权限。非常类似于您为CSRF令牌执行此操作的方式。
<form id="fbk_signin" action="<c:url value="/signin/facebook"/>" method="POST">
<button type="submit">
SignIn with facebook
</button>
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
<input type="hidden" name="scope" value="public_profile,email" />
</form>
可以在Facebook开发网站上找到权限值here。
感谢CBroe的答复让我在春季文档中看到了这一点。我不知道它。