为了账号安全,请及时绑定邮箱和手机立即绑定

为什么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 关注
  • 691 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信