如何检查已经登录Facebook的用户?

时间:2015-04-08 04:53:40

标签: javascript facebook facebook-login

我正在使用facebook javascript SDK在我的应用中将登录与facebook集成。 我的应用程序中有2个JS文件。

  1. FacebookLogin.js
  2. content.js
  3. 现在我在content.js中加载FacebookLogin.js。 此外,我的FacebookLogin.js下面有代码

    var userID;
    window.fbAsyncInit = function() {
        //SDK loaded, initialize it
        FB.init({
            appId      : 'MY_APP_ID',
            xfbml      : true,
            version    : 'v2.2'
        });
    
        //check user session and refresh it
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                //user is authorized
                userID = response.authResponse.userID;
            } else {
                document.getElementById('status').innerHTML = 'Please log into Facebook.';
            }
        });
    };
    

    现在我想在userID文件中使用content.js变量。 这样我就可以检查用户是否已经登录,如下所示

    if(userID === undefined && userID === null)
        {
            showSocialLoginPopup(); 
            return false;
        }
    

    这里showSocialLoginPopup()显示一个弹出窗口,其中包含不同的登录选项,如Facebook,Twitter等。现在,如果用户已经登录,那么我不想显示该弹出窗口。

1 个答案:

答案 0 :(得分:1)

这主要是关于范围的问题。

所有.js文件都将加载到同一个DOM中,因此可以跨文件访问变量和函数等。

一种选择是使userID成为全局变量:

1)确保在您的FacebookLogin.js之后加载了您的content.js  
2)在任何函数或对象之外声明你的变量userID

这将允许您在javascript中的任何位置访问userID

以下是javascript中变量范围的小教程:
http://www.w3schools.com/js/js_scope.asp

编辑: 另一个潜在的问题可能是计时。

FB.getLoginStatus()是一个异步调用,需要一些时间才能完成,在调用结束后才会设置userID。

如果content.js中的函数不在某种事件或超时后面,那么它可能在FB调用完成之前执行,这意味着仍然会未定义userID。