Facebook OAuth2 - “抱歉,出了点问题”

问题描述 投票:0回答:5

我们的网络应用程序允许用户通过 Facebook 登录。从技术上讲,我们使用的是 Facebook OAuth2。我们两年前就实现了这个登录流程。在 2015 年 11 月 13 日之前它都运行良好,但从那天起就不再运行了。当我们的服务器发送请求时 https://graph.facebook.com/oauth/access_token 使用适当的参数(

client_id
redirect_uri
client_secret
code
),来自 Facebook 的响应的 HTTP 状态为 400。响应正文是一个 HTML 页面,显示“抱歉,出了点问题”。

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_id
client_secret
)。目前,Facebook登录在测试环境中运行良好。我不确定11月13日是否有效。

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

感谢您的帮助。

crash facebook-oauth
5个回答
20
投票

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


4
投票

我在 2022 年发现的另一个极端案例: 在应用程序仪表板中,如果您选择

Facebook login for Business
,则会发生相同的错误。一旦您选择
Facebook Login
一个,它就会消失。


0
投票

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


0
投票

所有这一切都仅使用登录按钮。不是 API 服务器端,也不是

FB.login()
。它有时对我有用,有时不起作用,我不明白为什么。我会打开一个新窗口,它可能会起作用,也可能不会 - 但似乎一旦打破它就被打破了。

使用 Chrome“设备模拟器”时似乎出现问题。

查看 SDK Javascript(即 Facebook 登录按钮使用的 SDK),它会检查设备是否是“触摸”设备,如果是,则在请求 oauth 令牌时将使用

m.facebook.com
域。

此域名失败 m.facebook.com:

但是,如果页面加载时未激活移动设备模式,则它使用

www.facebook.com
并成功:

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

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

0
投票

我通过简单地删除或调整范围来解决问题,问题就为我解决了。因此,请尝试调整或删除您的范围。

© www.soinside.com 2019 - 2024. All rights reserved.