2012-04-10 148 views
0

我正在我的網站實施Facebook身份驗證(註冊+登錄)。一切工作正常,除了即使我登錄的按鈕顯示。在此先感謝Facebook登錄按鈕

<h1 id="welcome">Welcome to my website</h1> 
<div id="fb-root"></div> 
<span id="fb-login" class="hidden"> 
<fb:login-button registration-url="http://lemiart.com/register.php"></fb:login-button> 
</span> 
<script src="https://connect.facebook.net/en_US/all.js#appId=306738122732711&xfbml=1"></script> 
<script type="text/javascript"> 
FB.init({appId: '306738122732711', status: true, cookie: true, xfbml: true}); 

FB.Event.subscribe('auth.login', function(){ 
    loggedIn(); 
}); 

FB.getLoginStatus(function(response){ 
    if (response.session){ 
    // user logged in. Let the auth.login subscription handle this 
    } else { 
     loggedOut(); 
    } 
}); 

loggedIn = function() { 
    FB.api('/me', function(response) { 
    var welcome = document.getElementById('welcome'); 
    if (welcome) welcome.innerHTML += ' ' + response.id; 
    document.getElementById('fb-login').className = "hidden"; 
    }) 
} 

loggedOut = function() { 
    document.getElementById('fb-login').className=""; 
} 
</script> 

回答

0

您目前的實施將始終提示用戶登錄。你可能需要做的是:

寫一個回調函數給FB.init,然後檢查用戶是否登錄到你的應用程序,然後決定是否要顯示fb:登錄按鈕。

這將是這個樣子:

window.fbAsyncInit = function() { 
    FB.init({ 
     //... 
    }); 

    FB.getLoginStatus(function(response){ 
     FB.getLoginStatus(function(response){ 
      if (response.session){ 
       // user logged in. Let the auth.login subscription handle this 
     } else { 
      loggedOut(); 
     } 
    }); 
}; 
+0

謝謝你,但是從beggining隱藏在FB-登錄按鈕設置。我不明白它爲什麼顯示。 – 2012-04-10 12:19:17

+0

@ vitor-subs我這樣構造它的原因是爲了避免在瀏覽器已經執行FB.getLoginStatus調用之後FB.init完成的可能性。我從http://facebook.stackoverflow.com/questions/3548493/how-to-detect-when-facebooks-fb-init-is-complete得到我的代碼片段 – Shreeni 2012-04-10 23:33:54