繁体   English   中英

登录并注销后,Facebook登录按钮不再出现

[英]Facebook login-button no longer appears after login then logout

我的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()得到以下信息:

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

知道发生了什么吗? 有人注销后,如何重新显示Facebook登录按钮?

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

我想您需要查看挂接注销响应,等待它完成,然后再导航至/security_logout ,类似这样的内容(未经测试,我只是在FB.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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM