2012-01-12 26 views
1

我已經將下面的代碼與JS SDK結合使用了好幾個月。在過去的幾天裏,它給了我各種各樣的問題。JS SDK auth.logout事件行爲似乎最近發生了變化 - 發生了什麼?

  1. 註銷事件不會觸發註銷 - 我用JS XFBML標籤的登錄/退出,如:

注:點擊退出按鈕退出呢來自FB,但事件不會在我的網站上觸發。

  1. 註銷事件會在註銷時重新加載頁面時觸發,導致註銷事件觸發時頁面重新加載循環。現在沒有那麼重要,因爲最初的註銷事件不會觸發。然而,在今天之前,註銷事件和每次頁面加載時(註銷時)都會觸發註銷事件,這意味着它將無休止地通過註銷重定向重新加載頁面。

這一切都很好,直到幾天前,我幾個星期或幾個月沒有觸及那部分代碼。有什麼想法嗎?

事件代碼:

FB.Event.subscribe('auth.logout', function(response) { 

    window.location.href = '/logout.php'; 

    }); 

注:我也使用PHP SDK的網站上的其他功能 - 我使用的這兩種

最新版本,我發現另一篇文章放在這裏約這個問題,但解決方案是刪除重新加載,這是一個可怕的解決方案 - 爲什麼這個JS事件以這種方式工作?

謝謝!

+0

我有類似的困難,你有任何進展? – tsusanka 2012-01-15 12:48:04

+0

我的解決方案是簡單地從站點中刪除FB註銷功能。我想人們並不是真的想要從我的網站註銷FB(也許這就是FB也在想什麼) - 所以我只是允許直接註銷我的站點,而不會觸及FB憑證。我想要的一件事就是通過FB註銷用戶註銷時的註銷事件,以便我知道他們沒有完全登錄到我的站點 - 它使用了大量的Ajax,因此用戶不會加載新頁面如果FB連接不存在,那麼經常會有很多功能被破壞,所以現在我必須檢查狀態 – 2012-01-17 17:52:14

回答

0

那麼,我想出了一個解決方法,雖然我根本不感到驕傲。我使用這些事件:

FB.Event.subscribe('auth.login', function(response) { 
    setTimeout('document.location.reload()',0); 
}); 
FB.Event.subscribe('auth.logout', function(response) { 
    <? if ($_SESSION['user']['id']): unset($_SESSION['user']); ?> 
    setTimeout('document.location.reload()',0); 
    <? endif; ?> 
}); 

我存儲在會話中的所有用戶信息和有關會議的條件可以確保頁面不循環結束了。由於Facebook Javascript SDK window location reload not working on Firefox,使用setTimeout。 比我添加了一個jQuery函數重新加載頁面被點擊logoutButton後:

$(function() { 
    $('#logoutButton').click(function() { 
     setTimeout('document.location.reload()',0); 
    }); 
}); 

<span id="<?= $user ? "logout" : "login" ?>Button"> 
    <fb:login-button autologoutlink="true"></fb:login-button> 
</span> 

我已經在Firefox和Chrome測試這和正常工作。這不是真正的解決方案,它更像是醜陋的修復:),但我決定發佈它。我現在的想法實際上是離開整個「註銷操作」,因爲大多數用戶不希望從Facebook註銷。

+0

「我現在實際上在考慮離開整個」註銷操作「,因爲大多數用戶不想要無論如何,從Facebook註銷。「是的,這正是我的立場:) – 2012-01-17 17:53:18