為什么Facebook PHP SDK getUser總是返回0?我正在嘗試使用一個需要Facebook用戶提供信息的網站,我正在使用PHP和JS SDK。我有一個PHP函數:public function isLoggedOnFacebook() {
$user = $this->_facebook->getUser();
if ($user) {
return $this->_facebook->api("/$user");
}
return false;}在一個持有SDK中的facebook對象的類中$this->_facebook。然后在塊上我這樣做:<?php if (!$this->isLoggedOnFacebook()): ?><div>
<fb:login-button show-faces="true" perms="email" width="500" /></div><?php endif ?>并且FB JS環境已正確設置(我認為),因此它可以工作。因此,用戶可以彈出并授權該站點。問題是即使在用戶授權應用程序后,$ user始終為0,意味著$facebook->getUser()始終返回0,然后列出用戶的面孔,包括已登錄的用戶,但如果我打電話$facebook->api('/me')或其他什么,那么它將會拋出無效的令牌異常。我已經看到了這個問題,但我還沒有看到解決方案,我不知道問題出在哪里,我的想法已經用完了。在應用程序部分的開發人員的Facebook頁面上有一個網站選項卡,您可以在其中設置您的站點URL和站點域,我認為這是我的問題的原因,但我不知道究竟是什么字段應該包含。
3 回答

藍山帝景
TA貢獻1843條經驗 獲得超7個贊
我有同樣的問題,我想出來是因為SDK使用變量$_REQUEST
,在我的環境中不是真的$_GET
,$_POST
與$_COOKIE
變量合并。
我認為這取決于PHP版本,這就是為什么有人通過啟用cookie使其工作。
我在base_facebook.php中找到了這段代碼:
protected function getCode() { if (isset($_REQUEST['code'])) { if ($this->state !== null && isset($_REQUEST['state']) && $this->state === $_REQUEST['state']) { // CSRF state has done its job, so clear it $this->state = null; $this->clearPersistentData('state'); return $_REQUEST['code']; } else { self::errorLog('CSRF state token does not match one provided.'); return false; } } return false;}
我通過創建$ server_info變量來修改它,如下所示。
protected function getCode() { $server_info = array_merge($_GET, $_POST, $_COOKIE); if (isset($server_info['code'])) { if ($this->state !== null && isset($server_info['state']) && $this->state === $server_info['state']) { // CSRF state has done its job, so clear it $this->state = null; $this->clearPersistentData('state'); return $server_info['code']; } else { self::errorLog('CSRF state token does not match one provided.'); return false; } } return
- 3 回答
- 0 關注
- 721 瀏覽
添加回答
舉報
0/150
提交
取消