我使用Facebook的PHP API來控制訪問我的Web應用程序的一些部分。基本上我只是檢查用戶是否登錄Facebook並且用戶在每次加載頁面時授權應用程序(基本許可),然後根據狀態打印事物。Facebook的PHP API允許用戶訪問無效的令牌
類似於,if($check_user_lo_npe) { echo 'Welcome!'; }
,就這麼簡單。好吧,一切工作正常,直到我意識到,如果用戶從Facebook的用戶設置中刪除應用程序,這意味着令牌失效,即使我知道令牌無效,我仍然從check_user_lo_npe
響應中得到響應因爲正如我所說,用戶刪除了該應用程序。這是怎麼了檢查權限:
function check_user_lo_npe() {
global $facebook;
global $data;
$fb_user_id = $facebook->getUser();
if ($fb_user_id) {
try {
if(!isset($_SESSION['fb_user_profile'])) {
$_SESSION['fb_user_profile'] = $facebook->api('/me');
$temparray = $facebook->api('/me/friends');
$_SESSION['fb_user_friends'] = count($temparray[data]);
}
$data->reg_user($_SESSION['fb_user_profile'],$_SESSION['fb_user_friends']);
return array(true,'');
} catch (FacebookApiException $e) {
$fb_user_id = NULL;
return array(false,$e->getMessage());
}
} else {
return array(false,'');
}
}
我需要當用戶刪除應用程序,所以我可以再次將其發送到登錄界面來實現,該功能應該檢測時,有一個例外,但不知何故,我沒有得到任何...爲什麼?
我不認爲它已經越過了'if($ fb_user_id)'部分,但假設它是正確的。 – doublesharp
我不明白爲什麼會話必須處理這個問題,我只是將一些數據存儲到會話變量中,問題是即使該令牌無效,函數返回TRUE也不會在會話變量中檢查任何內容。 – DomingoSL
不會'fb_user_id'填充提供給SDK代碼的cookie中的任何內容嗎?即使該應用已從用戶的Facebook個人資料中刪除,直到您銷燬會話/清除cookie/etc – Igy