【问题标题】:Facebook OAuth doesn't return email of userFacebook OAuth 不返回用户的电子邮件
【发布时间】:2017-09-04 21:58:39
【问题描述】:

我正在学习使用 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

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

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

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

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

关于为什么教程中的那个有效而我的无效的任何想法?

我的 Facebook 登录配置如下所示:

有什么想法吗?

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 由于您刚刚在此处发布了您的应用 ID 和密码,现在每个人都拥有您应用的有效应用访问令牌……您现在需要在应用仪表板中重置应用密码。跨度>

标签: spring facebook facebook-graph-api spring-boot oauth


【解决方案1】:

我知道这有点过时了,但出于安全原因,任何来这里寻求帮助的人:

请勿公开发布您的 CLIENT_ID 或 CLIENT_SECRET 或将它们放在您的 app.js 等中。正确的协议是创建一个 .env 文件(前面的 . 表示它保持隐藏状态,还要将此“.env”文件添加到您的“.ignore”文件中,这样它就不会被上传到 github 或您的任何其他存储库上传文件到。) 在 .env 文件中,您应该输入以下行: FACEBOOK_CLIENT_ID:123456789(号码是给你的) FACEBOOK_CLIENT_SECRET:987654321(这个号码又给你了)

*请注意 : 左边的东西都是大写的,带下划线,并且 : 的两边都不应该有空格 也没有逗号或;行间。

那么在您的应用中,您应该将这些称为 process.env.FACEBOOK_CLIENT_ID 和 process.env.FACEBOOK_CLIENT_SECRET (或者,只要匹配加上前面的“process.env.”,您就可以调用它们。

最后,您需要通过以下方式要求它:

1) 在命令字段或类似字段中安装它(npm i dotenv)。

2) 需要(“dotenv”).config();在您的应用代码的第 1 行(或在其他要求之前尽可能靠近)

【讨论】:

    【解决方案2】:

    好的,我终于想通了,所以把它贴在这里给其他可能遇到的人。我没那么容易找到答案。

    您在 Facebook Graph API 更改之前编写了该教程。

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

    userInfoUri: https://graph.facebook.com/me?fields=email,name 
    

    这是对 Facebook API 2.4 版的更改。在撰写本文时,它是 2.8。请参阅此链接: https://developers.facebook.com/blog/post/2015/07/08/graph-api-v2.4/

    (特别注意它在第 3 条中所说的内容,从“更少的默认字段以获得更快的性能..”开始。

    希望这对某人有所帮助!

    【讨论】:

    • 这确实有帮助,谢谢!当人们遇到这种情况时,我现在建议始终尝试使用 OAuth 使用 Graph API Explorer 为您提供的访问令牌。
    • 即使我要求电子邮件范围和我?fields=email facebook 仍然没有返回电子邮件!
    • 对于像我这样在 2018 年看到这个问题的人,我在使用 spring-social-facebook 2.0.3 时遇到了同样的问题要解决,我必须将 scope: email,public_profile 添加到 application.yml 中,并更改 userInfoUri :graph.facebook.com/me?fields=email,name,locale
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多