在加载任何其他内容之前,请检查用户是否已登录

时间:2012-05-01 15:15:02

标签: javascript facebook facebook-graph-api

我正在制作一个简单的阅读画布应用程序,我希望在加载任何内容/文章之前检查用户是否已登录。当然我有FB.Init方法,我有一个getLoginStatus,它看起来像这样(我已经删除了我的命名空间和ID):

    <script> 
    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
      });

      FB.getLoginStatus(function(response) {      
        if (!response.authResponse) {
         var oauth_url = 'http://www.facebook.com/dialog/oauth/';
         oauth_url += '?client_id=[APP ID]';
         oauth_url += '&redirect_uri=' + encodeURIComponent('http://apps.facebook.com/[APP NAMESPACE]/');
         oauth_url += '&scope=read_stream,publish_stream,offline_access'
         window.top.location = oauth_url;
         }  
      });   

    };
    // Load the SDK Asynchronously
    (function(d){
      var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
      js = d.createElement('script'); js.id = id; js.async = true;
      js.src = "//connect.facebook.net/en_US/all.js";
      d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
</script>

但无论我做什么,它都会首先加载我的HTML内容(我的文章,Div,Paragraf,文本......)并在完成后重定向。

脚本是我的HTML头。我也尝试通过正文中的onLoad()方法加载它,但这也没有用,它仍会在重定向之前加载我的一些HTML内容。

在加载HTML代码的单个字母或图像之前,如何检查用户是否登录到Facebook(如果不是,则重定向)?

1 个答案:

答案 0 :(得分:1)

你正在使用facebook js sdk的异步加载,更重要的是,一旦你从服务器发回输出(静态内容或动态内容),浏览器就会得到整个内容并加载它,你就没有多少了可以做到这一点。

如果您想在此之前检查用户是否经过身份验证,我建议您使用Server-Side auth flow。 这样,您甚至可以在将内容返回给用户之前了解状态,如果您发现他未经过身份验证,那么您发送给他的内容就是重定向内容。 只有当用户回来进行身份验证时,才会发回画布内容。


修改

如果你的整个应用程序是静态的,那就保持这种方式,不需要为服务器端身份验证添加php(或任何其他服务器端解决方案)。

我不确定你为什么介意在重定向之前加载页面,这里有两个“解决方案”:

(1)加载一个只有fb sdk的最小化页面以及检查用户是否登录的方法,如果不是,则重定向他。 如果他已登录,则加载一个脚本,添加其余内容并动态添加到dom。

(2)如果您不希望用户在登录前看到某些内容,只需使用css隐藏该部分,并在登录时使用javasript进行更改。