春季社交Facebook 2.0.2无法收到电子邮件

时间:2015-11-06 11:08:05

标签: java spring facebook spring-social email-address

我正在使用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。你觉得那可能是那个吗?

2 个答案:

答案 0 :(得分:1)

facebook api的变化可能导致了这一点。请尝试以下代码:

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的答复让我在春季文档中看到了这一点。我不知道它。