0

我需要开发一个在页面选项卡内运行的 facebook 应用程序。只有喜欢此页面的用户才能使用该应用程序(并因此对其进行授权)。

使用signed_request参数可以很容易地知道给定的 facebook 用户是否喜欢该页面:

var isFan = false;
if (req.facebook.signedRequest && req.facebook.signedRequest.page){
    isFan = req.facebook.signedRequest.page.liked;
}

这工作得很好。现在,一旦用户喜欢该页面,我会显示一个“启动此应用程序”按钮,该按钮将对其进行授权:

$('#authApp').click(function(){

                FB.login(function(response) {

                    if (response.authResponse) {
                        window.location = window.location;
                    }
                }, {scope: 'user_likes,user_photos'});
                return false;
            });

如您所见,如果应用程序授权成功,我会重新加载页面。

但是,当页面重新加载时,signed_request.page参数会丢失。因此,非粉丝的 html 标记出现了。

这是在授权应用程序后重新加载时 signed_request 的样子:

{

算法:'HMAC-SHA256',代码:'...',issued_at:1348003786,user_id:'100...'}

如果我在那之后直接刷新页面。一切都很好,页面信息又出现了:

{算法:'HMAC-SHA256',过期:1348009200,issued_at:1348004248,oauth_token:'AA..',页面:{ id:'490 ...',喜欢:true,admin:true},用户:{国家: 'ec', 语言环境: 'en_US', 年龄: { min: 21 } }, user_id: '100...' }

这是应该如何工作的吗?

解决此问题的推荐方法是什么?

谢谢!

4

1 回答 1

1

但是,当页面重新加载时,signed_request.page 参数会丢失。

当然是,因为它仅在初始加载到 iframe 时传递给您的应用程序(通过提交到 iframe 的带有 method=post 的表单)。

如果您想在页面重新加载后获得其中包含的数据,您有两种选择:

  • 将其放入您自己的会话中,以便您可以随时从那里访问它。

  • 不要只是在 iframe 中重新加载您的应用程序,而是要重新加载整个 Facebook 页面(JavaScript、top.location)。然后,您的应用程序将再次加载到 iframe 中,并且还会第二次发布 signed_request。

于 2012-09-19T09:31:51.663 回答