0

編輯* * *Facebook的PHP-SDK不取消會議,如果用戶撤銷應用程序的權限

我覺得我沒有解釋不夠/正確的,這裏的步驟,當我有問題會話:

1.-用戶使用jssdk登錄並接受我的應用程序。

2.-現在我使用PHP-SDK getUser();並限制或顯示一些頁面。

3.-用戶不註銷,但直接撤消配置文件設置的權限。

4.-用戶返回到我的應用程序(當然沒有關閉頁面/瀏覽器),並且PHP-SDK仍然返回getUser()作爲有效的 連接用戶!

5.-如果我的應用程序應該知道用戶撤銷了權限,如果PHP-SDK說getUser()是一個有效的ID?

我的用戶登錄到我與JS-SDK應用程序和下面的代碼:

FB.login(function(response) { 
       // handle the response 
      }, {scope: 'email,user_likes'}); 

- 這是異步的劇本

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '****************', // App ID 
     channelUrl : 'localhost', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true, // parse XFBML 
     oauth:true 
    }); 

    // Additional initialization code here 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 
</script>` 

然而,當用戶刪除應用程序從他們的隱私設置並嘗試再次訪問我的應用程序,此代碼仍輸出用戶ID $user = $facebook->getUser();

我檢查了來自PHP-SDK的facebook.php,並且有一種方法應該是unsetSESSION但不會取消任何設置。

protected function clearPersistentData($key) { 
    if (!in_array($key, self::$kSupportedKeys)) { 
     self::errorLog('Unsupported key passed to clearPersistentData.'); 
     return; 
    } 

    $session_var_name = $this->constructSessionVariableName($key); 
    unset($_SESSION[$session_var_name]); 
    } 

這是一個錯誤?或者即使用戶撤銷了應用程序的權限,Facebook也總是讀取會話?

我認爲$facebook->getUser();的行爲應該輸出0當用戶沒有連接到應用程序,但當然這不會發生什麼。

回答

0

通過Facebook的會話和權限是兩個不同的東西。

會話是應用程序和用戶特定於您的代碼。你需要控制這個會話。

如果有人撤銷您應用的權限,那麼它會刪除Facebook中的權限。除非您在Facebook應用程序中設置了正確的設置,否則不會通知您的應用程序。甚至還需要清除會話。

因此,雖然會話將保存之前獲得的信息,但如果您嘗試連接以使用您以前擁有的權限在Facebook上執行某些操作,則會發生錯誤。

+0

我在問題的底部添加了額外的信息,只是這樣才能更好地解釋。 – Danny 2012-03-24 09:50:29

+0

我的答案保持不變。當有人撤銷權限時,無法知道您正在使用JS SDK並且當前會話正在進行。要確認你需要調用一個需要在Facebook上獲得許可的方法並查找拒絕的響應。 – 2012-03-25 05:45:28

相關問題