2012-09-18 144 views
0

我需要开发一个在页面选项卡中运行的Facebook应用程序。只有喜欢此页面的用户才能使用该应用(并因此授权)。授权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},user:{country:'ec',locale:'en_US',age:{ min:21}},user_id:'100 ...'}

这是这应该如何工作?

解决此问题的建议方法是什么?

谢谢!

回答

1

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

当然是,因为它只是传递给你的应用程序上初始加载到IFRAME(通过提交给iframe的方法=后一种形式)。

如果你想拥有它的页面重载后包含的数据,你有两个选择:

  • 把它放进你自己的会话,这样你就可以从那里任何时候访问它。

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

相关问题