FB.getLoginStatus()无法工作

10

我正在尝试编写一段代码来检查用户是否已登录,发现FBJS API中有一个内置方法称为getLoginStatus()。

我已经在HTML中实现了它,但不知何故,在getLoginStatus()中的alert()未被触发。

我还尝试在init()中添加channelUrl,但仍然是同样的情况。

以下是我编写的代码。

有人可以帮我吗?

提前感谢!

<!-- Initialize FB API for use -->
    <div id="fb-root"></div>
    <script type="text/javascript"> 
    //var curLoc = window.location;
    //var chanURL = curLoc.protocol + "//" + curLoc.hostname + ":" + 
    //curLoc.port + "/channel.html"


        window.fbAsyncInit = function() {
            FB.init({appId: '####', status: true, cookie: true, xfbml: true});       

            FB.getLoginStatus(function(response) {
                  if (response.session) {
                    // logged in and connected user, someone you know
                    alert('logged in');
                  } else {
                    // no user session available, someone you dont know
                    alert('not logged in');
                  }
            });
        };
        (function() {
            var e = document.createElement('script');
            e.type = 'text/javascript';
            e.src = document.location.protocol +
                '//connect.facebook.net/en_US/all.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);
        }());
    </script>
7个回答

10

我之前遇到过这个问题,原因是我没有在Facebook中登录,并且我的应用程序处于沙盒模式。也许这里的问题也是一样的,可能性不大但还是想提一下。

注意:类似的组合也不会起作用,比如以测试用户的身份登录Facebook但无法访问相关应用程序,或者作为非测试/非管理员用户登录Facebook并将应用程序设置为沙盒模式。


5

顺便说一下,他们又改了。

现在是:response.authResponse

不再是response.session了。


4
我曾经遇到过同样的问题。这是由于FB应用程序设置中的“沙盒模式”引起的。启用此模式时,它不会触发getLoginStatus()响应。可能是因为当未登录时无法确定您是否真正是注册开发人员。

2
他们进行了更改。在响应上运行console.log,并查看您需要这样测试:

他们进行了更改。在响应上运行console.log,并查看您需要这样测试:

if (response.status=='connected')) {...}

编辑:这是我登录的大部分内容:

<?php 
// using Facebook PHP SDK (v.3.1.1)
$facebook = new Facebook(array(
  'appId'  => APP_ID
  'secret' => SECRET
));

// See if there is a user from a cookie
$user = $facebook->getUser();

if ($user) {
  try {
     // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
    $user = null;
}
}
?>

同时,正文中的JavaScript代码:

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
window.fbAsyncInit = function() {
    FB.init({
      appId   : '<?php echo $facebook->getAppId(); ?>',
      status  : true,
      cookie  : true, 
      oauth: true,
      channelUrl : MY_CHANNEL_URL,
      xfbml   : true
    });

    FB.getLoginStatus(function(response) {
        console.log( response );
        if ((response.status)&&(response.status=='connected')) {
            loadStreamInto ( $("#FBmessages") );
        } else {

        }
    });
};
</script>

谢谢回复,Bobbi。我已经将if语句更改为response.status,但仍然没有响应,我也使用了console.log,但它在firebug上没有输出。我还尝试启用oauth并使用authResponse,但结果相同。如果我使用localhost进行测试,这会有影响吗? - darangho
1
如果您的路径错误,尝试重新定向登录时,FB会发出投诉。我想你会注意到这一点。我一直使用本地主机,只需在开发人员页面上输入它作为您的应用程序网站URL即可。关于console.log,如果您什么都没有得到,请查看是否完全调用了您的fbAsyncInit函数,并从那里进行调试。 - Bobbi Bennett

2

我猜想你在链接的代码中已经使用 #### 替换了实际的 appId。如果没有,请检查此问题。

假设你已经正确放置了你的 appId,那么问题可能与你正在本地测试有关。我认为,如果 javascript 服务的 url 与给定 App Id 相关联的 url 不匹配,它将无法正常运行。


1

只有在fb.init中设置oauth:true时,response.status=='connected'才会发生。

代码看起来没问题,应该可以正常工作,不确定为什么它不起作用。


感谢用户911086的评论。我也不知道为什么它不起作用。 - darangho

1
我并不是说这个方法一定适用于你,但我曾经遇到过一个类似的问题。我的应用在本地环境下运行良好,但是在部署到Heroku后就无法正常工作。后来我发现,在Facebook应用程序设置中,我将所有的URL都设置为了本地的URL,当我将其更改为我的部署应用程序的URL时,问题得到了解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接