为什么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
- 3 回答
- 0 关注
- 691 浏览
添加回答
举报
0/150
提交
取消