Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah PHP SDK Facebook `getUser()` Sentiasa Mengembalikan 0?

Mengapakah PHP SDK Facebook `getUser()` Sentiasa Mengembalikan 0?

Barbara Streisand
Barbara Streisandasal
2024-11-22 07:53:09680semak imbas

Why Does Facebook's PHP SDK `getUser()` Always Return 0?

Mengapa Facebook PHP SDK getUser() Sentiasa Mengembalikan 0?

Dalam membangunkan aplikasi web yang berinteraksi dengan Facebook, isu getUser() secara konsisten mengembalikan 0 selalunya dihadapi. Ini boleh menghalang akses kepada maklumat pengguna yang diperlukan dan mengakibatkan ralat pengesahan.

Satu sebab yang berpotensi untuk tingkah laku ini terletak pada pergantungan PHP SDK pada pembolehubah $_REQUEST, yang mungkin tidak bergabung dengan betul dengan pembolehubah permintaan lain ($ _GET, $_POST dan $_COOKIE) dalam persekitaran anda. Versi PHP juga boleh memainkan peranan.

Memeriksa fungsi getCode() dalam fail base_facebook.php mendedahkan kod berikut:

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;
}

Untuk menangani isu ini, kami boleh mengubah suai ini berfungsi seperti berikut:

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 false;
}

Pengubahsuaian ini menggabungkan semua pembolehubah permintaan ke dalam pembolehubah $server_info, yang memastikan bahawa fungsi getCode() boleh mengakses parameter kod daripada mana-mana sumber ini, tanpa mengira konfigurasi persekitaran PHP anda.

Atas ialah kandungan terperinci Mengapakah PHP SDK Facebook `getUser()` Sentiasa Mengembalikan 0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn