2011-01-26 123 views
8

後,我用這個代碼Facebook的註銷按鈕和重定向註銷

<fb:login-button autologoutlink="true" perms="user_likes" size="large"></fb:login-button> 

創建一個登錄/註銷FB按鈕。 一切正常,登錄後,登錄按鈕成爲註銷按鈕。但是,如果用戶單擊註銷按鈕,則當前頁面不刷新,因此只有當用戶通過身份驗證時纔會出現的所有內容都會一直存在,直到完成手動頁面刷新爲止。

如果我註銷URL(使用Javascript SDK)

$logoutUrl = $facebook->getLogoutUrl(); 

,然後實施註銷按鈕自己不會出現這種情況;在這種情況下,傳遞適當的「下一個」參數(帶有當前頁面的url)並重新加載當前頁面。

我仍然想使用第一個解決方案,是否有可能使它使用「下一個」參數?

+0

@Piskvor我試過,但沒有幫助迄今爲止 http://facebook.stackoverflow.com/questions/8066589/when-i-hit-logout-button-i-want-to-run- a-javascript-function – 2011-11-09 16:15:31

回答

14

不要在重定向自己 - 它添加到JavaScript中,FB.init()後的地方:當註銷通過FB按鈕發生

<script> 
    FB.Event.subscribe("auth.logout", function() {window.location = '/logout'}); 
</script> 

此功能將閃光。

+0

它非常完美,非常感謝。我應該注意到,在我的示例代碼中已經有一個FB.Event.subscribe('auth.login',function(){window.location.reload()});爲登錄部分。爲註銷做同樣的事情是正確的。 – Eugenio 2011-01-26 13:41:32

+1

@Eugenio:不客氣。幾個月前我做了完全相同的事情,我認爲這是一個相當常見的問題:) – Piskvor 2011-01-26 14:59:34

1

上面的答案由Piskvor爲我做了。我瘋狂地花了多少小時來試圖弄清楚這一點。

CakePHP的Facebook等插件的主要問題是它們沒有附帶更新。 API,特別是像Facebook這樣的流行的API,一直在變化,因爲它們正在被打亂。如果最初作爲業餘愛好寫作的人會繼續他的生活,並停止更新SDK,那麼對於如何改變這些東西就不太熟悉的人來說,這些東西就會陷入困境。

工作代碼:

儘管如此,感謝一個很好的解決方案Piskvor,這裏是我的

apps/plugins/facebook/views/helpers/facebook.php 

      $init .= $this->Html->scriptBlock(
<<<JS 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId : '{$appId}', 
     session : {$session}, // don't refetch the session when PHP already has it 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    }); 
    FB.Event.subscribe("auth.logout", function() { 
     window.location = '/users/logout' 
    }); 
    {$callback} 
}; 

代碼的關鍵部分在這裏一段代碼:

 FB.Event.subscribe("auth.logout", function() { 
     window.location = '/users/logout' 
    }); 
    {$callback} 
1

對於集成身份驗證(Facebook + Asp.Net MVC),我只使用Javascript和FormsAuthentication.SignOut();

function LogoutFacebook() {  
FB.logout(function (response) { 
    window.location = "/facebook/logout/"; 
}); }