服务器端身份验证和请求Facebook超时?

服务器端身份验证和请求Facebook超时?,facebook,authentication,oauth,Facebook,Authentication,Oauth,我的应用程序的一部分需要登录,无法使用javascript等进行客户端身份验证,因此在以下位置使用http请求进行服务器端身份验证: https://graph.facebook.com/oauth/access_token?client_id=[app\u id]&客户端\u secret=[secret]&重定向\u uri=[uri]&代码=[code] 大多数情况下,这很好用。但是,我会间歇性地从该请求返回超时/空响应。我可以运行一个工具,将要求这个页面一遍又一遍,并将成功约80-90%

我的应用程序的一部分需要登录,无法使用javascript等进行客户端身份验证,因此在以下位置使用http请求进行服务器端身份验证:

https://graph.facebook.com/oauth/access_token?client_id=[app\u id]&客户端\u secret=[secret]&重定向\u uri=[uri]&代码=[code]

大多数情况下,这很好用。但是,我会间歇性地从该请求返回超时/空响应。我可以运行一个工具,将要求这个页面一遍又一遍,并将成功约80-90%的时间。一旦出现一个故障,对于任何用户,所有请求都会失败几秒钟,然后它会再次工作


有没有其他人经历过类似的事情,或者你知道facebook会在某个阈值上切断的请求是否有上限?我在文档中找不到任何听起来类似的信息。

这是因为如果您发送了太多请求,facebook会认为您想进行DDOS攻击,并暂时阻止您的请求。

在应用程序洞察中,您可以从诊断页面检查API切换,也可以从性能页面检查最常见的错误。如果您没有看到任何错误或没有任何限制,您可能会更改应用程序逻辑,如果收到超时/空响应,请再次请求令牌。

您必须为会话仅检索一次令牌。从另一个角度看,这肯定是为了防止人群拥挤。 但是,如果您没有申请“脱机访问”特殊权限,您的令牌将有过期时间。 默认值为retentionPeriod=2,retentionUnit=hour。 也许你应该问问我

scope=offline_access
进入您的权限,然后仅检索用户令牌一次。 此外,您还需要执行以下操作:

try{my api call} catch(bad token){ reload the new token and retry } 

如果任何API调用因身份验证错误而失败,则重新询问令牌

我以前考虑过,但我没有提出足够的要求,肯定吗?该应用程序约有10万用户,每天只有30-40k api请求my insights。如果是这种情况,那么您应该在“api”选项卡上的应用程序洞察中找到有关它的信息。我的诊断没有限制,也没有错误。我已经实现了重试,但其中一些在成功之前必须重试20-30次。我认为使用脱机访问来解决此问题是过分的,但我同意缓存令牌以尝试并确保仅请求一次是一个好主意。但是,如果您试图登录用户,则不能使用缓存令牌,因为显然您要检查用户是否已实际登录,而不仅仅是您在OAuth 2.0中拥有其访问令牌storedwell,fb cookie正是为此目的而设置的。@Guillaume Pelletier cookie是否解决了您不能使用缓存令牌以防它们未真正登录的问题?缓存令牌是服务器端的问题。。情况不一样。例如,它就像你在使用任何应用程序,即使是来自“不受信任”的设备,并且希望该应用程序(如deezer)在你的墙上或时间线上发布更新。@GuillaumePelletier我仍然很困惑,当你说“你必须为你的会话仅检索令牌一次”时,FB API文档中的说明在哪里?我将尝试将我的问题表述为一个详细的问题,并参考这次讨论。