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

问题描述:

我的Facebook登录按钮已经被伟大的工作: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登录按钮重新出现?

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

我猜你需要看挂钩到注销响应,等待它完成,然后才转到/security_logout,是这样的(未经测试,我只是用Google搜索的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; 
} 
+0

看起来你可能是正确的,下一页(注销页面)不显示Facebook登录按钮。然而,之后的页面确实...我猜脸谱需要一点时间。奇怪的是,为什么我的FB.getLoginStatus显示用户在用户明显登录之前还未登录,登录按钮没有显示的原因。 –

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

+0

基本上用户没有被注销。我总是试图显示登录按钮。 –

+0

文档中没有属性“onlogin”http://developers.facebook.com/docs/reference/plugins/login/我的标准登录按钮会自动显示其状态。可能你应该删除属性onlogin,并调用函数myLoginCode()FB.login()? –

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

谨慎添加解释吗?文字块不是教导任何人的好方法。 – slifty