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