Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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
Javascript 在加载任何其他内容之前,请检查用户是否已登录_Javascript_Facebook_Facebook Graph Api - Fatal编程技术网

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

Javascript 在加载任何其他内容之前,请检查用户是否已登录,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,我正在制作一个简单的阅读画布应用程序,我想在加载任何内容/文章之前检查用户是否已登录。当然,我有FB.Init方法,其中有一个getLoginStatus,它看起来是这样的(我已经删除了名称空间和ID): window.fbAsyninit=函数(){ FB.init( { appId:'[APP ID]',//APP ID 状态:true,//检查登录状态 cookie:true,//启用cookie以允许服务器访问会话 xfbml:true//解析xfbml }); FB.getLogin

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


window.fbAsyninit=函数(){
FB.init(
{
appId:'[APP ID]',//APP ID
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
FB.getLoginStatus(函数(响应){
如果(!response.authResponse){
var oauth_url='1〕http://www.facebook.com/dialog/oauth/';
oauth_url+='?客户端_id=[APP id];
oauth_url+='&重定向_uri='+encodeURIComponent('http://apps.facebook.com/[应用程序名称空间]/”);
oauth_url+='&scope=读取_流、发布_流、脱机_访问'
window.top.location=oauth\u url;
}  
});   
};
//异步加载SDK
(职能(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);
}(文件);
但不管我做什么,它都会先加载我的HTML内容(我的文章、div、段落、文本…),然后在完成后重定向

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


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

一旦从服务器返回输出(静态内容或动态内容),您将使用FacebookJSSDK的异步加载浏览器获取整个内容并加载,对此您无能为力

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


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

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

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


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

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

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


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

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

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


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

我是否可以通过JS SDK执行此操作?我所看到的只是PHP示例和代码片段,我对PHP的使用效率不是很高。如果是的话,你能给我一个如何用JS实现这一点的例子吗?不,你将不能使用JSSDK,它只用于客户端使用。您可以在node.js中找到一些用于服务器端javascript的东西,或者自己编写,因为sdk只是http请求的门面。我已经用python(几次)和java实现了。你在服务器端使用的是什么?我的canvas应用程序目前完全是HTML+JS(根本没有php),在你告诉我我甚至不知道服务器端身份验证之前,并假设JS SDKs FB.login也处理了它。因为它只处理静态HTML链接(没有数据获取),所以我不需要服务器端请求。所以,我想我在服务器端什么都没用……哦,我编辑了我的答案,因为评论中没有足够的空间。是的,我已经用body.style=“none”实现了选项2;但有些浏览器在这方面有问题。尽管如此,谢谢你。我能通过JS SDK做到这一点吗?我所看到的只是PHP示例和代码片段,我对PHP的使用效率不是很高。如果是的话,你能给我一个如何用JS实现这一点的例子吗?不,你将不能使用JSSDK,它只用于客户端使用。您可以找到与node.js一起用于服务器端javascript或wri的内容
    <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>