2012-01-11 131 views
15

我試圖註銷用戶與Facebook的JS SDK的facebook,但呼籲:Facebook的JS SDK FB.logout()不會終止用戶會話

FB.logout(function(response){ 
    console.log(response); 
}); 

回報: response.status ==「連接」

只有在刷新頁面後,SDK纔會意識到會話已結束。任何人都知道可能會導致這種行爲?此代碼以前在我的應用程序中工作,並且最近開始以這種方式運行。

又如用Firebug:

enter image description here

+0

在調用註銷並刷新頁面之前,如果您在Facebook上繼續使用,您仍然連接? 如果您連續兩次調用註銷,它是相同的響應? (如果不是這不僅僅是通話和響應之間的時間問題) (並且,即使它沒有回答「爲什麼」部分,你不能通過重新加載響應中的頁面來解決這個問題嗎?) 哦和最後一個,「未定義」是另一個console.log我想? – 2012-01-13 10:58:27

+0

@Flow'S,是'undefined'是一個不相關的控制檯日誌。 FB.logout()會將用戶從Facebook中註銷,但當前頁面FB對象直到刷新後纔會實現。我強烈希望在用戶註銷後不必手動刷新頁面。此外,我試圖刪除fbsr_ cookie,看看這是否刪除它 - 沒有效果。這以前工作,只是最近才改變。另外,我在使用FB JS SDK的hulu.com上嘗試了相同的測試,結果相同。這可能是SDK中的錯誤? – 2012-01-13 19:12:21

+0

我目前使用'FB.logout'回調中的'FB.getLoginStatus'來確保JS-SDK忘記用戶。 – 2012-01-13 19:58:10

回答

13

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 這是一個JS SDK中的一個bug,現在已經修復了,它應該不會太長。
之前那麼你可以做以下

FB.logout(function(response) { 
    FB.Auth.setAuthResponse(null, 'unknown'); 
    ... 
}); 
+0

謝謝,這對我有用! – Mark 2012-04-30 17:29:17

+0

謝謝你與我合作,解決我的大問題,欣賞:) – 2012-06-28 15:07:58

+0

我試過了,但函數(響應)從未執行,任何想法? – simo 2012-11-15 09:31:48

1

我有作爲標榜FB.Logout()工作不一樣的體驗。作爲一種變通方法我用javascript函數下面的檢查,如果用戶在如果是的話記錄下來,重定向到https://www.facebook.com/logout.php與後續頁面的URL來加載和他們的訪問令牌:

function reallylogout() { 
     FB.getLoginStatus(function (response) { 
     if (response.authResponse) { 
      window.location = "https://www.facebook.com/logout.php?next=" + 
      'URL to redirect to' + 
      "&access_token=" + response.authResponse.accessToken; 
     } else { 
      $("#loginButtonDiv").show(); 
      $("#logoutButtonDiv").hide(); 
     } 
     }); 
    } 

顯示/隱藏位只是jQuery來顯示或隱藏其中有登錄和註銷按鈕的div。註銷按鈕的onclick會觸發reallyLogout()函數。

這適用於我的應用程序。

+0

這可行,但我真的在尋找一種解決方案,可以觸發FB JS SDK在沒有執行頁面刷新的情況下「忘記」已登錄的用戶。直到幾個星期前,這工作,我從那以後沒有做任何改變。 – 2012-01-13 21:41:26

3

http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

當你註銷,跨域請求被髮送到Facebook的無效會話。當您點擊重新加載時,另一個請求會被髮送到Facebook的網站 - 由於FB將cookie識別爲無效,它會正確地從您的瀏覽器中刪除cookie。

我懷疑這是他們忘記解析fbm_ cookie的正則表達式錯誤,最近在最後一天左右發佈了。我只是很驚訝,這個修復沒有被推動。

1

我面臨着類似的問題。註銷後我使用了FB.getLoginStatus()

-1

這可能不起作用,因爲您不包含您的Facebook應用程序密鑰。它爲我這樣的:

Ext.get('auth-logoutlink').on('click', function(){ 
        FB.getLoginStatus(function (response) { 
        if (response.authResponse) { 
         window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" + 
         '**MYWEBSITEURL**' + 
         "&access_token=" + response.authResponse.accessToken; 
        } else { 
         //HIDE **LOGOUT BUTTON** 
         //SHOW **LOGIN BUTTON** 
        } 
        }); 
     }); 
0

玉傢伙我發現了一個解決方案:

豎起onclick事件註銷<a>標籤這樣

onclick="FB.logout(function() { document.location.reload(); });" 

一起:

<a href="#" 
    id="auth-logoutlink" 
    style="float:left;font-size: small;" 
    onclick="FB.logout(function() { document.location.reload(); });"> 
    [logout] 
</a> 
0

在asp.net mvc應用程序中,我做了如下。


<a href="javascript:void(0);" class="logOff">Log out</a> 

$(function() { 


    $(".logOff").click(function() { 

     //check if logout is 
     FB.getLoginStatus(function (response) { 
      console.log('inside login status'); 
      if (response.status === 'connected') { 
       // the user is logged in and has authenticated your 
       // app, and response.authResponse supplies 
       // the user's ID, a valid access token, a signed 
       // request, and the time the access token 
       // and signed request each expire 
       var uid = response.authResponse.userID; 
       var accessToken = response.authResponse.accessToken; 
       FB.logout(function (response) { 

        FB.Auth.setAuthResponse(null, 'unknown'); 

       }); 
      } else if (response.status === 'not_authorized') { 
       // the user is logged in to Facebook, 
       // but has not authenticated your app 

      } else { 
       // the user isn't logged in to Facebook. 
       console.log('response status not logged in'); 
      } 
     }); 
     window.location.href = '@Url.Action("LogOff", "Account")'; 

    }); 
+0

'FB.Auth',我使用Facebook SDK 2.5不存在Auth。 – manonthemoon 2016-08-12 20:48:36

2
FB.logout(function(response) { 
    ... 
}); 

這FB.logout方法正在100%。 問題是用戶試圖從本地主機調用它不工作。

請嘗試從服務器調用它。

+0

就我而言,是的,你是對的。它在localhost上不起作用。但我不確定你的話(100%工作)。 – 2018-02-01 03:41:14