Facebook OAuth不会返回用户的电子邮件

use*_*183 3 spring facebook oauth facebook-graph-api spring-boot

我正在使用OAuth关于Spring Boot的本教程:https: //spring.io/guides/tutorials/spring-boot-oauth2/

在"点击"应用中,我添加了:

security:
oauth2:
client:
  clientId: 233668646673605
  clientSecret: 33b17e044ee6a4fa383f46ec6e28ea1d
  scope: email <------- ***** THIS IS WHAT I ADDED ***** ---------
  accessTokenUri: https://graph.facebook.com/oauth/access_token
  userAuthorizationUri: https://www.facebook.com/dialog/oauth
  tokenName: oauth_token
  authenticationScheme: query
  clientAuthenticationScheme: form
resource:
  userInfoUri: https://graph.facebook.com/me

logging:
  level:
    org.springframework.security: DEBUG
Run Code Online (Sandbox Code Playgroud)

我使用了我的一个测试Facebook帐户,一切正常.Principal对象包含电子邮件地址.上述配置文件中的凭据是本教程的一部分.

为了使用我自己的OAuth注册应用程序进行测试,我访问了我的常规帐户并创建了一个Facebook开发者帐户,其中包含一个使用Facebook登录作为产品的应用程序.

然后我将自己的clientId和clientSecret放入YAML文件中,重新打包应用程序并运行它.

未从Facebook收到同一测试Facebook帐户的电子邮件地址.

关于为什么教程中的那个工作而我的工作没有的任何想法?

这是我的Facebook登录配置的样子: 在此输入图像描述

有任何想法吗?

任何帮助将非常感激!

谢谢!

use*_*183 11

好吧,我最终想出来了,所以在这里张贴它可能会遇到其他人.我很难找到答案.

您在Facebook Graph API发生变化之前编写了该教程.

现在,仅仅因为您指定'范围:电子邮件',它只允许您获取电子邮件(在用户批准后).但是,要实际获取电子邮件,您需要在URL本身中明确指定.所以,在上面的配置中,这一行会改变(不是额外的'?fields = email,name'):

userInfoUri: https://graph.facebook.com/me?fields=email,name 
Run Code Online (Sandbox Code Playgroud)

这是对版本2.4的Facebook API的更改.截至本文撰写时,它是2.8.请看以下链接:https: //developers.facebook.com/blog/post/2015/07/08/graph-api-v2.4/

(特别是要注意它在第3个子弹中所说的内容,首先是"更少的默认字段以提高性能......"

希望这有助于某人!

  • 对于像我这样的人,在2018年查看此内容时,我在使用spring-social-facebook 2.0.3时遇到了相同的问题,要解决此问题,必须将范围:email,public_profile添加到application.yml中,并更改userInfoUri:https://graph.facebook .com / me?fields =电子邮件,名称,区域设置 (2认同)