我正在使用Facebook iFrame应用程序玩FQL。我最近刚开始遇到一个间歇性错误,当我尝试一个简单的FQL查询,例如获取用户朋友的数组时...我收到以下错误消息:
致命错误:未捕获异常:102:需要在base_facebook.php第1039行引发用户会话
唯一可以清除此消息的是清除所有Cookie。只需登出并重新登录Facebook就不会阻止它。令人沮丧的是,我无法重复按需提供的错误,这使得很难追踪正在发生的事情,但是从base_facebook.php
上的那一行看,似乎因为访问而引发了异常令牌不再有效
我如何解释这个?即如何检查访问令牌是否仍然有效,如果没有请求/设置新令牌?我正在使用最新的Facebook PHP SDK v3和CodeIgniter框架。
有一个类似的问题,但它与早期版本的SDK有关,因此不再有效。
编辑:尝试了一些其他的事情......当索引页面检测到用户已登录时,它不会重定向到oauth链接(即https://www.facebook.com/dialog/oauth?client_id-etc。)。作为测试,我尝试将该链接放在页面上,尝试单击并强制进行新的身份验证。那也行不通。我已经尝试将访问令牌设置为null然后获取一个新令牌。那里也没有运气。唯一的解决办法仍然是清除浏览器中的所有cookie。
任何关于如何调试/解决方案等的信息/提示的链接都会一如既往地受到高度赞赏!
以下是代码大纲:
public function index()
{
$this->load->library('facebook');
// check if we can retrieve user id from facebook -
$user = $this->facebook->getUser();
if (!$user)
{ // if no user id there then redirect to Facebook login page
$this->loginByFacebook();
}
else // if we have id then we have a logged in FB user
{
$fb_uid = $user;
$fb_usr = $this->facebook->api('/me');
print_r($fb_usr); // This always works and outputs my FB info
// HERE I PUT A LINK TO NEW PAGE WHICH IS CREATED WITH FUNCTION BELOW
}
function getFriendsList () {
//echo "here";
$this->load->library('facebook');
//$access_token = $this->facebook->getaccessToken();
$query = '
SELECT first_name, last_name, name, uid,pic_square FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me() )
ORDER BY name';
// I have tried running the query by getting access token and supplying it and without and still have the same problem.
//$FQL = array ( "method" => "fql.query", "query" => $query, "access_token" => $access_token);
$FQL = array ( "method" => "fql.query", "query" => $query);
$data = $this->facebook->api($FQL);
return $data;
}
答案 0 :(得分:1)
我要关闭它,因为在执行了一些更多的测试后,我似乎无法一致地重新创建行为。在Mac上使用Chrome但在其他浏览器中使用Chrome时似乎没有出现错误,而在PC上使用Chrome时似乎没有。我做的另一项测试是进入Chrome设置并仅从facebook.com删除Cookie,但仍然没有清除它。只清除所有cookie才能解决问题。
到目前为止,没有人就此提出任何建议(而且我无法在网上找到任何其他参考资料)这一事实让我想知道这是否只是影响我特定设置的事情。
答案 1 :(得分:0)
我在我的应用程序中添加了一个access_token到我的fql查询后出现了。我再次删除它,错误仍然存在。我的问题SEEMS一直是我在没有事先验证(login-url)的情况下调用了函数。以某种方式它后来工作。希望这有帮助。
答案 2 :(得分:0)
我也遇到了这个错误。我暂时解决了。只需卸载页面上的应用,然后再次登录应用即可。它应该工作正常。但它不是永久的解决方案。要卸载应用,
设置 - >应用 - >点击相应应用上的x按钮。