在开发与 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中文网其他相关文章!