未从 Facebook OAuth 接收名字、姓氏和姓氏

Not receiving first name, last name and surname from Facebook OAuth

最近我从另一个开发者那里继承了一个 spring 应用程序,它使用 Spring 社交和 Spring 安全来验证用户。

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

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

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

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

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

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

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

问题确实是旧的 Facebook 应用程序使用低于 2 的 Graph API 版本并且它与 spring-social-facebook 包版本 1.1.0.[=16= 完美配合]

如果想创建一个新的 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);
}