我们的网络应用程序允许用户通过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登录在测试环境中工作并且在同一个应用程序的生产环境中不起作用?为什么生产实例在特定日期中断并且在一周后仍然被打破?
感谢您的帮助。
答案 0 :(得分:0)
最后,通过重新启动servlet容器(Tomcat 7)解决了该问题。但是,我不知道为什么。
答案 1 :(得分:0)
所有这些都仅使用登录按钮。不是API服务器端,也不是FB.login()
。它有时对我有用,有时不起作用,我不知道为什么。我将打开一个新窗口,它可能会起作用,也可能不会起作用-但似乎一旦断开便会断开。
查看SDK Javascript(即Facebook登录按钮使用的SDK),它会检查该设备是否为“触摸”设备,如果是,则在请求请求时将使用m.facebook.com
域oauth令牌。
但是,如果在页面加载时未激活移动设备模式,则它将使用www.facebook.com
并成功:
所以对我来说,当前的解决方法是:
m.facebook.com
,则说明执行速度不够快,或者您正在使用类似Angular的功能进行热重装,因此需要手动刷新。答案 2 :(得分:0)
我有同样的问题。我认为问题出在您的身份验证请求中传递了无效范围。尝试删除身份验证请求中的作用域,以查看是否可行。