【问题标题】:Not receiving first name, last name and surname from Facebook OAuth未从 Facebook OAuth 收到名字、姓氏和姓氏
【发布时间】:2015-09-23 11:59:46
【问题描述】:

最近我从另一个开发人员那里继承了一个 spring 应用程序,它使用 Spring Social 和 Spring Security 来验证用户。

因为编写它的开发人员想在 Facebook 上停用他的 App Id,所以我创建了一个新的。这就是问题开始的时候。

我将应用程序 ID 和应用程序密码更改为我的新应用程序 ID,但突然注册后,Facebook 停止提供名字、姓氏和电子邮件地址。

一开始我认为这可能是因为我的新 Facebook 用户也是新应用程序 ID 的所有者,但不是。该应用程序仍然使用旧的应用程序 ID 运行高效,并且当我与我的用户注册时,会提供上述属性。

我在这里缺少什么?在developers.facebook.com 上定义我的 Facebook 应用程序时,我是否必须切换一些神奇的东西?

新应用程序已激活并可供公众使用。设置了站点 URL 和应用程序域以及有效的 OAuth 重定向 URI。

我正在尝试在localhost 上测试应用程序,Facebook 应用程序设置中设置的域也是如此。

如果我使用getName()org.springframework.social.connect.UserProfile 的实例会返回用户名,但是getFirstName()getLastName()getEmail() 都返回null

【问题讨论】:

  • 您的新应用是否有权查看名字、姓氏和电子邮件地址。这可以在您的应用程序下的developers.facebook.com 中的状态和评论菜单中进行检查
  • 是的,所有用户(电子邮件、public_profile 和 user_friends)都是绿色、实时和可用的。
  • @shazin org.springframework.social.connect.UserProfile 的实例唯一返回的是名称(方法getName())。其他获取电子邮件、名字和姓氏的方法返回 null。
  • 我想我找到了问题所在。我想我的应用程序已经使用 Graph API v2.x 创建了,而我在 maven 依赖项中的 Spring Social 包仅支持 v1.x。如果结果是原因,我会检查并发布答案。

标签: java spring-security facebook-oauth spring-social spring-social-facebook


【解决方案1】:

问题确实在于旧的 Facebook 应用使用的 Graph API 版本低于 2,并且它与 spring-social-facebook 包版本 1.1.0 完美配合。

如果想要创建一个新的 Facebook 应用程序,则无法再使用 Graph API 1.x。

解决方案是将spring-social-facebook 包升级到版本2.0.2 并更改以下代码

@Bean
public ProviderSignInUtils providerSignInUtils() {
    return new ProviderSignInUtils();
}

@Bean
public ProviderSignInUtils providerSignInUtils(
        final ConnectionFactoryLocator connectionFactoryLocator,
        final UsersConnectionRepository usersConnectionRepository) {
    return new ProviderSignInUtils(connectionFactoryLocator,
            usersConnectionRepository);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多