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

Check if user has been Logged In before loading anything else

本文关键字:用户 检查 是否 登录 加载 其他 任何内      更新时间:2023-09-26

我正在制作一个简单的阅读画布应用程序,我想在加载任何内容/文章之前检查用户是否已登录。我自然有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(如果他没有登录,则重定向(?

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

如果您想检查用户之前是否经过身份验证,那么我建议您使用服务器端身份验证流。这样,您可以在将内容返回给用户之前就知道状态,如果您发现他未经过身份验证,那么您发回给他的内容就是重定向内容。仅当用户返回身份验证时,才会发回画布内容。


编辑

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

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

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

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