1

我正在制作一个简单的阅读画布应用程序,我想在加载任何内容/文章之前检查用户是否已登录。当然,我有 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 内容(我的文章、Divs、Paragrafs、文本......)并在完成后重定向。

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

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

4

1 回答 1

1

您正在使用 facebook js sdk 的异步加载,不仅如此,一旦您从服务器发送回输出(静态内容或动态内容),浏览器就会获取整个内容并加载它,您无能为力那。

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


编辑

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

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

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

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

于 2012-05-01T15:22:09.750 回答