登录后不再出现Facebook登录按钮,然后退出

时间:2011-09-04 11:55:39

标签: login facebook-graph-api facebook facebook-authentication

我的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登录按钮重新出现?

3 个答案:

答案 0 :(得分:2)

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

我想你需要看一下登录响应,等待它完成,然后导航到/security_logout,就像这样(未经测试,我只是用Google搜索FB.logout()的API) :

<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;
}

答案 1 :(得分:0)

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

答案 2 :(得分: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>
相关问题