Javascript SDK在页面选项卡中加载时不返回页面ID,admin,喜欢

时间:2012-06-29 05:08:54

标签: javascript facebook

使用FB.login登录时,response.authResponse不包含带有id,admin,likes的页面属性。

但是,如果我们在PHP中加载页面,它确实将它包含在签名请求中(getSignedRequest)。

我认为使用javascript工作正常。

问题是,如果你开发一个主要的javascript应用程序,那么除非你使用服务器,否则你无法检测到该页面。使用javascript登录后需要刷新,以便服务器可以解析签名的请求。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

  

使用javascript登录后需要刷新,以便服务器可以解析签名的请求。

不一定是“刷新” - AJAX请求也会这样做。

  

有什么想法吗?

如果在您的情况下往返服务器不可行,您也可以解析签名请求客户端 - 对于base64解码现代浏览器知道方法window.atob,对于旧版浏览器,您可以获取脚本从网上做到。这只是解码已签名的请求,但实际上验证它。如果你还需要这样做,你必须使用服务器端approch,因为这需要你的应用程序保密。

答案 1 :(得分:0)

如果您想使用Javascript api获取已签名的请求,可以使用FB.getLoginStatus()来检索signed_request。也就是说,如果用户登录到您的应用程序/网站。如果不是,您可以调用FB.login方法。我试过这种方法:

<script type="text/javascript">

            window.fbAsyncInit = function() {
                FB.init({ appId: 'YOUR_APP_ID', //change the appId to your appId
                    status: true, 
                    cookie: true,
                    xfbml: true,
                    oauth: true});



               function updateButton(response) {

                 console.log(response); 

                 if(response.status == 'connected'){
                     //alert('Yes Connected');

                    console.log(response.authResponse.signedRequest);  
                    //This log can be seen through the firebug extention in console tab 
                 }
                 else{
                     alert('Not Connected');
                 }

                }

                // run once with current status and whenever the status changes
                FB.getLoginStatus(updateButton);

            };

            (function() {
                var e = document.createElement('script'); e.async = true;
                e.src = document.location.protocol 
                    + '//connect.facebook.net/en_US/all.js';
                document.getElementById('fb-root').appendChild(e);
            }());



        </script>

答案 2 :(得分:0)

无法完成。 Facebook仅将页面选项卡信息作为签名请求获取变量的一部分发送到服务器。