2012-02-21 92 views
0

所以我遇到了Facebook SDK的一些奇怪的問題。我使用JS SDK作爲PHP SDK。要註銷用戶我使用的onclick如下:Facebook JS/PHP SDK

<a href="/logout/" onclick="FB.logout();">Log out</a> 

我點擊該鏈接後,當我嘗試執行任何JS SDK調用,如:FB.getAuthResponse();它如預期的那樣返回null。但是在點擊鏈接後,當我使用PHP SDK來檢查某人是否已經登錄,或者只是使用下面的SDK函數:$ this - > facebook - > getAccessToken();它會返回一個有效的令牌,就像我仍然登錄一樣。

我在這裏錯過了什麼? 順便說一句,你需要我的一些PHP代碼,我檢查登錄?

在此先感謝!

+0

用戶是否真的從Facebook註銷?我的意思是,如果你打開facebook.com - 你還在登錄嗎? – zerkms 2012-02-21 19:52:41

+0

是的,當我去Facebook時,我必須再次登錄。 – Diederik 2012-02-22 20:17:16

+0

是'$ fb-> api('me');'在php中返回什麼?我問,因爲FB PHP SDK只是緩存訪問令牌,所以'getAccessToken()'不總是返回真正的工作令牌 – zerkms 2012-02-22 20:18:39

回答

1

PHP sdk將訪問令牌保存到本地會話中。這是一個巨大的問題。特別是在facebook令牌過期並且本地SDK認爲它仍然活動的時候。我們使用的解決方案是每次我們需要用戶數據來檢查訪問令牌,看它是否仍然有效。人們會認爲這應該是SDK的惡意行爲(以保證活躍的令牌),但遺憾的是情況並非如此。 這是我們使用的代碼片段。

$graph_url = "https://graph.facebook.com/me?access_token=". $access_token; 

$response = curl_get_file_contents($graph_url); 
$decoded_response = json_decode($response); 
//Check for errors 
if ($decoded_response->error) { 
    // check to see if this is an oAuth error: 
    if ($decoded_response->error->type== "OAuthException") { 
    // Retrieving a valid access token. 
    $dialog_url= "https://www.facebook.com/dialog/oauth?" 
    . "client_id=" . FB_APP_ID 
    . "&redirect_uri=" . urlencode($redirect_url) 
    . "&scope=" . implode(',', $permissions); 
    exit("<script> top.location.href='" . $dialog_url ."'</script>"); 
    } 
    else { 
    //handle other error types 
    } 
else { 
    return $facebook-getUser(); 
} 

這是我們自己的getUser函數的一部分。希望它能幫助你實現你自己的:)

+0

'我們使用的解決方案是每次我們需要用戶數據,我們檢查訪問令牌,看它是否仍然有效。 ---當你知道無效標記時 - 實際有用的請求或標記請求時,實際上**沒有區別**。而且,Facebook的執行力比你的更有效率,只要它不需要每次額外的令牌請求 – zerkms 2012-02-22 20:21:31