今天Facebook oauth登录我的网站破了。我启动了调试器,发现解析访问令牌失败了。这似乎是因为Facebook改变了oauth响应的格式。它曾经是CGI参数:
access_token=EAAFO...cBUZD&token_type=bearer&expires_in=5183996
但突然间它似乎以JSON的形式出现了:
{"access_token":"EAAFO...cBUZD","token_type":"bearer","expires_in":5183996}
我的代码中的修复看起来很简单。我只需要将解析器从CGI解析器更改为JSON解析器,并获得我感兴趣的相同变量:access_token
。
我的问题是版本化。当我的网站中断时,我不喜欢它。
为什么Facebook改变了这个?这个变化是否有记录?在Oauth上是否有某种版本控制我应该用它来防止像这样的破坏?如何通知Facebook未来对Oauth的更改?
Facebook API upgrade tool未列出我的应用程序对最新版API所需的任何更改。在任何情况下,我用于Oauth的网址都没有嵌入其中的版本号:
https://www.facebook.com/dialog/oauth
https://graph.facebook.com/oauth/access_token
答案 0 :(得分:1)
正如WizKid所述,它在两年前的Facebook Developers Changelog中以标题" [Oauth Access Token]格式"宣布。由于API的变化,Facebook确实有一个试图找到会破坏的东西的工具,但它没有提醒这个。
您可以将API版本号放入Facebook的Oauth网址中。使用版本号,Facebook登录的流程为:
https://www.facebook.com/v2.9/dialog/oauth
,其中包含一系列必需参数,例如您的客户端ID,您请求的权限列表以及返回网址。https://graph.facebook.com/v2.9/oauth/access_token
联系。 Facebook用令牌回复https:///graph.facebook.com/v2.9/me
以请求有关该用户的信息这是这里记录的过程:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow