Facebook OAuth2 - "Sorry, something went wrong"

Facebook OAuth2 - "Sorry, something went wrong"

我们的网络应用程序允许用户通过 Facebook 登录。从技术上讲,我们使用的是 Facebook OAuth2。我们在两年前就实现了这个登录过程。它在 2015 年 11 月 13 日之前运行良好,但从那天起就没有了。当我们的服务器发送请求时 https://graph.facebook.com/oauth/access_token 使用适当的参数(client_idredirect_uriclient_secretcode),来自 Facebook 的响应具有 HTTP 状态 400。响应正文是一个 HTML 页面,上面写着"Sorry, something went wrong".

11 月 13 日,Facebook 上可能出现了一些问题。 我发现以下消息: http://www.independent.co.uk/life-style/gadgets-and-tech/news/facebook-down-site-breaks-for-many-people-though-not-for-everyone-a6732906.html

但是,我们的服务器在一周后仍然收到此错误响应。我们在生产环境中部署了一个系统实例,在测试环境中部署了另一个实例(具有不同的 Facebook 帐户,即具有不同的 client_idclient_secret)。目前,Facebook 登录在测试环境下运行良好。我不确定它是否在 11 月 13 日有效。

您有从此类问题中恢复的经验吗?为什么 Facebook 登录在测试环境中有效,而在同一应用程序的生产环境中无效?为什么生产实例在某一天坏了,一周后还是坏了?

感谢您的帮助。

最后,通过重启 servlet 容器解决了问题 (Tomcat 7)。但是,我不知道为什么。

所有这些都是专门使用登录按钮。不是 API 服务器端,也不是 FB.login()。它有时对我有用,有时对我不起作用,我不明白为什么。我会打开一个新的 window,它可能会工作,也可能不会 - 但它似乎一旦坏了就坏了。

使用 Chrome 'Device simulator' 时似乎有问题。

查看 SDK Javascript(即 Facebook 登录按钮使用的 SDK),它会检查设备是否为 'touch' 设备,如果是,它将使用 m.facebook.com 请求 oauth 令牌时的域。

这个域失败 m.facebook.com:

但是,如果页面加载时未激活移动设备模式,则它会使用 www.facebook.com 并成功:

所以对我来说,当前的解决方法是:

  • 假设您在控制台处于活动状态的情况下进行开发。
  • 当您需要重新加载页面时,请按 Ctrl + Shift + M 以停用移动设备模式。
  • 刷新页面
  • 按钮初始化后,按 Ctrl + Shift + M 再次激活它.
  • 如果你看到 m.facebook.com 那么你做的不够快,或者你可能正在使用类似 Angular 的热重载,你需要手动刷新。

我遇到了同样的问题。我认为问题源于在您的身份验证请求中传递了无效的范围。尝试删除身份验证请求中的范围以查看是否有效。