Facebook查询失败的PHP - 访问令牌问题

时间:2011-11-17 22:35:06

标签: facebook facebook-fql facebook-php-sdk

我正在使用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;           

}

3 个答案:

答案 0 :(得分:1)

我要关闭它,因为在执行了一些更多的测试后,我似乎无法一致地重新创建行为。在Mac上使用Chrome但在其他浏览器中使用Chrome时似乎没有出现错误,而在PC上使用Chrome时似乎没有。我做的另一项测试是进入Chrome设置并仅从facebook.com删除Cookie,但仍然没有清除它。只清除所有cookie才能解决问题。

到目前为止,没有人就此提出任何建议(而且我无法在网上找到任何其他参考资料)这一事实让我想知道这是否只是影响我特定设置的事情。

答案 1 :(得分:0)

我在我的应用程序中添加了一个access_token到我的fql查询后出现了。我再次删除它,错误仍然存​​在。我的问题SEEMS一直是我在没有事先验证(login-url)的情况下调用了函数。以某种方式它后来工作。希望这有帮助。

答案 2 :(得分:0)

我也遇到了这个错误。我暂时解决了。只需卸载页面上的应用,然后再次登录应用即可。它应该工作正常。但它不是永久的解决方案。要卸载应用,

  

设置 - >应用 - >点击相应应用上的x按钮。