【发布时间】:2011-06-19 02:28:20
【问题描述】:
所以我尝试将 Graph API 与 Facebook JS SDK 一起使用,但在 Safari 中出现以下错误:
“OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。”
我怀疑这与 Safari 对 x-domain cookie 设置非常严格这一事实有关,因此我在 Firefox 中尝试了它,在 FB.init() 中将 cookie 选项设置为 false。我确实发现我的 FB.api() 请求遇到了同样的错误。
FB.init({
appId: "<%= app_id %>",
status: true, // check login status
// We cannot rely on this cookie being set in an iframe. I found this
// out because the Graph API was not working in Safari.
// cookie: true, // enable cookies to allow the server to access the session
xfbml: true, // parse XFBML
channelUrl: window.location.protocol + '//' + window.location.host + '/fb/canvas/channel.html'
});
所以我想知道...有没有一种好方法可以在FB.api() 请求中手动设置access_token 查询参数?
如果FB.init() cookie 设置正确,FB.api() 请求参数如下所示:
access_token xxxxxxxxxxxx|1.xxxxxxxxxxxxxxxxxxxxxx__.3600.xxxxxxxxxx-xxx|xxxxxxxxxxxxxxxxxxxxxxxxxxx
callback FB.ApiServer._callbacks.xxxxxxxxxxxxxxx
pretty 0
sdk joey
在 Safari 中(或未设置 cookie FB.init() 选项时)FB.api() 请求参数如下所示:
callback FB.ApiServer._callbacks.xxxxxxxxxxxxxxx
pretty 0
sdk joey
现在...显然我的应用程序能够在服务器端生成access_token...我想知道是否有任何方法可以手动设置FB.api() 以使用我的服务器端生成的@ 987654336@.
【问题讨论】:
-
我认为还有另一种方法可以做到这一点。基本上,由于我们有机会在填充 iFrame 的初始发布请求上设置 cookie,我们可以利用这个机会模仿 FB JS SDK 在
FB.init()期间尝试设置的fbs_xxxxxxxxxcookie。现在... SDK 设置的 cookie 值如下所示:fbs_xxxxxxxxx="access_token=xxx&expires=xxx&secret=xxx&session_key=xxx&sig=xxx&uid=xxx"。access_token和expires部分很简单。但是我在弄清楚其他部分时遇到了一些麻烦。
标签: javascript safari facebook-graph-api facebook-iframe facebook-javascript-sdk