4

我的 facebook 登录按钮运行良好:

<fb:login-button length="long" background="light" perms="email"
                 size="medium" onlogin="myLoginCode()"></fb:login-button>

用户登录后,该 facebook 登录按钮就会消失。在我的注销按钮上,我有这样的东西:

<a href="/security_logout" onclick="FB.logout();">logout</a>

当我点击那里时,我同时退出了 facebook 身份验证机制和我自己的网站。然后我再次看到“使用 Facebook 登录”按钮。

FB.logout()问题是,当您注销(并被调用)时,我突然注意到Facebook 登录没有重新出现!那你有点卡住了。发生了什么变化?如果我从 Firebug 调用它:

FB.getLoginStatus(function(response) {
    if (response.authResponse) alert(response.authResponse);
    else alert("not logged in");
});

我会收到一条警告说未登录。但是,如果我打电话FB.login(),我会得到:

用户已连接时调用 FB.login()

知道发生了什么吗?如何让 Facebook 登录按钮在有人注销后重新出现?

4

3 回答 3

2

心理调试:FB.logout()发出 AJAX 请求,该方法在发出请求时立即返回,因此您的浏览器会导航到您的 url/security_logout并在 Facebook 服务器有机会处理它之前断开 AJAX 连接。

我想您需要查看连接到注销响应,等待它完成,然后才导航到/security_logout,类似这样的东西(未经测试,我只是用谷歌搜索了 API FB.logout()):

<a href="#" onclick="my_fb_logout()">logout</a>

.

function my_fb_logout() {
    FB.logout(function (response) {
        // turn https://www.mywebsite.com/current_path?query_string=xyz#section1
        // into https://www.mywebsite.com
        var url_string = window.location.href;
        var base_url_len = url_string.length - window.location.pathname.length - window.location.search.length;
        var base_url = url_string.substr(0, base_url_len);

        // append /security_logout and redirect to your site's logout page
        var new_url = base_url + "/security_logout";
        window.location.href = new_url;
    });

    // this may not the best way to prevent bubbling of the event (navigating to # in the current page),
    // but will do fine in this case I believe 
    return false;
}
于 2011-09-04T12:42:27.747 回答
0

您可以使用 Javascript SDK http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/订阅 auth.logout 当用户从 facebook 注销时,您可以再次显示登录按钮。

于 2011-09-04T15:43:20.333 回答
0
<div id="fb-btn"><div class='fb-login-button' data-scope='email,user_checkins,offline_access,publish_stream,read_stream'>Facebook</div></div>
<div id='fb-root'></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId: '###########',
      cookie: true,
      xfbml: true,
      oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location="http://###########";
    });
    FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        document.getElementById('fb-btn').innerHTML = "<a href='http://###########' class='fb_button fb_button_medium'><span class='fb_button_text'>Facebook</span></a>";
      }
    });
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
于 2012-02-09T23:31:07.280 回答