亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么Facebook PHP SDK getUser總是返回0?

為什么Facebook PHP SDK getUser總是返回0?

蝴蝶刀刀 2019-08-13 14:46:40
為什么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


查看完整回答
反對 回復 2019-08-13
  • 3 回答
  • 0 關注
  • 721 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號