我正在制作一个简单的阅读画布应用程序,我希望在加载任何内容/文章之前检查用户是否已登录。当然我有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(如果不是,则重定向)?
答案 0 :(得分:1)
你正在使用facebook js sdk的异步加载,更重要的是,一旦你从服务器发回输出(静态内容或动态内容),浏览器就会得到整个内容并加载它,你就没有多少了可以做到这一点。
如果您想在此之前检查用户是否经过身份验证,我建议您使用Server-Side auth flow。 这样,您甚至可以在将内容返回给用户之前了解状态,如果您发现他未经过身份验证,那么您发送给他的内容就是重定向内容。 只有当用户回来进行身份验证时,才会发回画布内容。
如果你的整个应用程序是静态的,那就保持这种方式,不需要为服务器端身份验证添加php(或任何其他服务器端解决方案)。
我不确定你为什么介意在重定向之前加载页面,这里有两个“解决方案”:
(1)加载一个只有fb sdk的最小化页面以及检查用户是否登录的方法,如果不是,则重定向他。 如果他已登录,则加载一个脚本,添加其余内容并动态添加到dom。
(2)如果您不希望用户在登录前看到某些内容,只需使用css隐藏该部分,并在登录时使用javasript进行更改。