2011-09-04 262 views
4

我的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登錄按鈕重新出現?

回答

2

心靈調試: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顯示用戶在用戶明顯登錄之前還未登錄,登錄按鈕沒有顯示的原因。 –

0

您可以訂閱使用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()? –

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

謹慎添加解釋嗎?文字塊不是教導任何人的好方法。 – slifty