Facebook:“仅在画布中需要访问令牌来请求此资源”

时间:2013-05-26 18:00:29

标签: facebook facebook-javascript-sdk facebook-canvas

Facebook Javascript API在画布中失败,但在我直接访问应用程序时工作正常。每当我尝试进行facebook查询时,我都会收到“请求此资源需要访问令牌”错误。我试过getLoginStatus,但回调永远不会在画布中被调用。然而,它确实在直接网页中被调用。看到这段代码:

window.fbAsyncInit = function() {
    FB.init({
        appId      : '{{ app_id }}', // App ID
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true, // parse XFBML
        frictionlessRequests : true
    });

    console.log("INIT");

    FB.getLoginStatus(function(response) {
        alert("GOT STATUS");
        alert(response);
    },true);
};

(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

始终输出“INIT”,但仅在我直接访问页面时调用警报。

编辑:以下是有问题的应用:https://apps.facebook.com/quirkyversaries/

当您尝试创建新场合并搜索朋友时,会出现此问题。由于上述问题,搜索失败。当您尝试创建页面时,它也会失败,因为页面将无法加载。

1 个答案:

答案 0 :(得分:1)

1)应用会调用callback function,或者会重定向到redirect_url   所以,如果你指定了redirect_url,请删除

2)根据docs

  • 您必须订阅活动auth.statuschange

     FB.Event.subscribe('auth.statusChange', function(response) {
     // do something with response
     });
    
  • true函数的末尾包含getLoginStatus是不好的做法,因为您在每次加载页面时都会调用它。这是真的迫使往返电话。由于您在fb.init中有status:true,因此您可能不需要