Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
授权facebook标签应用程序_Facebook_Node.js_Express_Facebook Javascript Sdk - Fatal编程技术网

授权facebook标签应用程序

授权facebook标签应用程序,facebook,node.js,express,facebook-javascript-sdk,Facebook,Node.js,Express,Facebook Javascript Sdk,我需要开发一个运行在页面标签内的facebook应用程序。只有喜欢此页面的用户才能使用该应用程序(并因此授权) 使用signed_request参数,很容易知道某个facebook用户是否喜欢该页面: var isFan = false; if (req.facebook.signedRequest && req.facebook.signedRequest.page){ isFan = req.facebook.signedRequest.page.liked; }

我需要开发一个运行在页面标签内的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;
            });
如您所见,如果应用程序成功授权,我将重新加载页面

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

这是授权应用程序后重新加载时签名的_请求的样子:

{

算法:“HMAC-SHA256”,代码: '...', 发布地址:1348003786,用户id:'100…'

如果我在那之后直接刷新页面。一切正常,页面信息再次出现:

{算法:“HMAC-SHA256”,过期时间:1348009200,发布时间: 1348004248,oauth_标记:“AA..”,页面:{id:'490…',喜欢: true,admin:true},用户:{country:'ec',locale:'en_US',年龄:{ min:21},用户_id:'100…'}

这是怎么回事

建议的解决方法是什么

谢谢

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

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

如果要在重新加载页面后获取其中包含的数据,有两个选项:

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

  • 不要只是在iframe中重新加载你的应用程序,而是重新加载整个Facebook页面(JavaScript,top.location)。然后,您的应用程序将再次加载到iframe中,并将再次发布已签名的_请求