首页  >  文章  >  后端开发  >  为什么 Facebook 的 PHP SDK `getUser()` 总是返回 0?

为什么 Facebook 的 PHP SDK `getUser()` 总是返回 0?

Barbara Streisand
Barbara Streisand原创
2024-11-22 07:53:09603浏览

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

为什么 Facebook PHP SDK getUser() 总是返回 0?

在开发与 Facebook 交互的 Web 应用程序时,getUser() 始终返回 0 的问题很常见遭遇。这可能会阻碍对必要的用户信息的访问并导致身份验证错误。

此行为的一个潜在原因在于 PHP SDK 对 $_REQUEST 变量的依赖,该变量可能无法与其他请求变量正确合并($ _GET、$_POST 和 $_COOKIE)在您的环境中。 PHP 版本也可以发挥作用。

检查 base_facebook.php 文件中的 getCode() 函数会发现以下代码:

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

要解决此问题,我们可以修改此代码函数如下:

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

此修改将所有请求变量合并到 $server_info 变量中,这确保了 getCode() 函数无论您的 PHP 环境配置如何,都可以从任何这些来源访问代码参数。

以上是为什么 Facebook 的 PHP SDK `getUser()` 总是返回 0?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn