FQL 错误 102 需要用户会话进行重复查询

2023-12-02

我有一个功能齐全的 FQL 查询,但是当第二次触发它时,我收到错误代码 102:需要用户会话

在我的应用程序上,我有一个自动完成朋友搜索功能。 我正在使用 jquery ui 自动完成功能和使用 AJAX 的动态源。

这是我的 PHP 函数:

function fb_buscarAmigosAutocomplete($term='',$app_user=false){
$facebook = new Facebook(array(
    'appId' => APP_ID,
    'secret'=> APP_SECRET 
));

$term=trim(strtolower($term));

//Buscar usuarios
try{
    $fql     =  "   SELECT uid,name,first_name,last_name,pic_square
                    FROM user
                    WHERE uid IN (
                        SELECT uid2
                        FROM friend
                        WHERE uid1=me()
                    )
                    AND strpos(lower(name),'".$term."') >=0
                ";
    if($app_user)
        $fql .= "   AND is_app_user";           

        $fql .= "   LIMIT 5";

        $param  =   array(
            'method'    => 'fql.query',
            'query'     => $fql,
            'callback'  => ''
        );
        $result   =   $facebook->api($param);


} catch(FacebookApiException $e){
    $error=$e->getMessage();
    var_dump($e);
}

if(!empty($result)) {
     $return['amigos']=$result;
     $return['valido']=true;
}else 
    $return['valido']=false;

return $return;
}

奇怪的是,这在过去 2-3 周内运行良好,突然就停止了。甚至“奇怪”的是,它在第​​一次触发时仍然有效,但第二次就不行了。由于这是异步的,我不明白如果是第一次、第二次、第三次、第四次触发它有什么区别。

有任何想法吗?

Edit 1通过进一步的研究,我想我找到了解决方法。 这可能是因为报告了一个错误here正如所讨论的here

我的解决方法是捕获我通过 Facebook 对象获得的第一个 access_token,然后将其附加到该类的每个实例,如下所示

第一次连接:

$facebook = new Facebook(array(
    'appId' => APP_ID,
    'secret'=> APP_SECRET 
));

$uid = $facebook->getUser();
if($uid){
  $_SESSION['access_token']=$facebook->getAccessToken();
} 

该 API 的任何其他用途:

$facebook = new Facebook(array(
    'appId' => APP_ID,
    'secret'=> APP_SECRET 
));
$facebook->setAccessToken($_SESSION['access_token']);
try{
    $user_info  = $facebook->api('/'.$uid.'?fields=id,name,first_name,last_name,email,picture');

} catch(FacebookApiException $e){
    $error = $e->getMessage();
}    

至此已经解决了问题

Edit 2
它没有...有时我的访问令牌是一个有效的字母数字+100个字符的字符串,并且这些时候它可以工作。

有时它只是一个 48 个数字字符串,但它不是......我真的被困在这里了


发生这种情况的原因可能是因为2012 年 12 月 5 日Facebook 推出的“重大变更”。具体来说:

OAuth 授权代码的新安全限制

我们只允许将授权码兑换为访问令牌一次,并要求在创建后 10 分钟内将其兑换为访问令牌。这符合 OAuth 2.0 规范,该规范从一开始就规定“授权代码必须是短暂的且一次性使用”。有关更多信息,请查看我们的身份验证文档。

这就是为什么您的第一个请求有效,而第二个请求无效。在第二次尝试时,SDK 会尝试将用户的身份验证代码交换为访问令牌。但由于这些变化,这只能完成一次。您的代码看起来应该可以正常工作,因为您明确保存然后设置access_token当您第一次收到它后。确保情况确实如此(确认 $_SESSION var 已正确保存/检索)。如果由于某种原因不是这样,您将看到 102 错误。

Cheers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FQL 错误 102 需要用户会话进行重复查询 的相关文章

随机推荐

  • JButton 列之间的间距

    我正在开发一个简单的 GUI 其中 JButton 的前两列和后两列之间有一个岛 代码如下 JPanel panel new JPanel new GridLayout 50 4 JScrollPane scrollable new JSc
  • 将自定义文本添加到 Woocommerce 中的变化价格

    我以为这很容易 但我被困住了 我想做的就是在产品页面上的变体价格后面添加 each 一词 我找到的解决方案将其添加到类别页面和产品页面的两个位置 代码是 Adds a text Each after price function chang
  • .split() 在 IE8 中无法按预期工作

    我使用以下方法从变量中包含的 URL 中提取变量 它在现代浏览器中工作正常 但在 IE8 中 它在第一个变量上失败 但在第二个变量上成功 var p http sagensundesign com height 400 width 300
  • R:“乘以”数据框的字符串列

    不知道这个操作叫什么 谷歌也没有帮助 假设我有两个像这样的简单数据框 df1 lt data frame factor1 c a b c df2 lt data frame factor2 c x y z gt df1 factor1 1
  • 使用 javax.faces.STATE_SAVING_METHOD 在客户端保存会话的含义

    我的第一个 JSF 页面抛出异常javax faces application ViewExpiredException 当我搜索时 我得到了解决我的问题的解决方案
  • R 将上个月的值添加为列

    我有一个数据表 其中包含按月列出的日期和价格 set seed 128 dat lt data table DATE c 2014 01 01 2014 02 01 2014 03 01 2014 04 01 2014 05 01 2014
  • 如何在 x86 汇编中移动两个浮点相乘的结果?

    我目前正在尝试将两个浮点数相乘 其中一个来自浮点向量 存储在 ebx 中的地址 并与我存储在 ecx 中的值相乘 我已经确认输入值是正确的 但是 例如 如果我将 32 乘以 1 则 EAX 中的值将更改为 00000000 而 EDX 中的
  • Visual Studio 和 DPI 问题

    我正在 Windows Vista 上使用 VS2008 开发 Windows 窗体应用程序 前几天我尝试在 Windows XP 上运行我的应用程序 GUI 上的所有内容都一团糟 我意识到我在 Windows Vista 上使用 120
  • 如何获取CloudKit的实际配额?

    我使用 Cloudkit 和私有数据库将一些文件存储到 iCloud 并在 iOS 和 OSX 之间同步 现在我想实现一些功能 用户可以在不离开应用程序并查看首选项的情况下查看 iCloud 中剩余的空间 但我找不到任何有关如何获取这些数据
  • Hibernate 多对多,没有第三个表

    我有两个表 Users 和 UserRole create table Users UserId serial not null UserName varchar 100 not null UserType varchar 15 not n
  • Android 和 JFileChooser

    我开发了一个桌面应用程序 允许用户从手机中提取图像 当我第一次开始这个项目时 我的 Android 正在运行 Gingerbread 当我通过 USB 将手机插入笔记本电脑时 它会显示为 具有可移动存储的设备 因此 JFileChooser
  • Excel 宏,在运行时插入国际有效的公式

    我有一个带有宏的 Excel 电子表格 可以插入条件格式 如下所示 Selection FormatConditions Add Type xlExpression Formula1 UND A3 lastName B3 firstName
  • Delphi 汇编函数返回长字符串

    我正在尝试学习 Delphi 中的内联汇编编程 为此我发现本文非常有帮助 现在我希望编写一个返回长字符串的汇编函数 特别是AnsiString 为了简单起见 我已经写了 function myfunc AnsiString asm eax
  • 如何使用过滤分支更改多个提交的提交作者?

    我正在使用在这里找到的这个脚本link编辑所有提交的作者信息 bin sh git filter branch env filter OLD EMAIL email protected CORRECT NAME Your Correct N
  • Webpack babel 6 ES6 装饰器

    我有一个用 ES6 编写的项目 使用 webpack 作为我的打包器 大多数转译工作正常 但是当我尝试在任何地方包含装饰器时 我收到此错误 Decorators are not supported yet in 6 x pending pr
  • 当人们说 css 中没有父选择器时,他们是什么意思?

    例如 假设我有一个如下所示的 HTML 我没有选择父元素 ul 吗 ul margin 50px ul test li hello li how are u 为了理解它们的含义 您需要理解什么选择意味着在CSS parent简单 By se
  • apache beam 2.7.0 在 utf-8 编码法语字符中崩溃

    我正在尝试将 csv 从 google 云平台的存储桶写入数据存储区 其中包含法语字符 口音但我有一条有关解码的错误消息 尝试从 进行编码和解码后latin 1 to utf 8 没有成功 使用unicode unicodedata 和编解
  • php从mysql输出到html表

    目前我正在开发一个网站正常运行时间搜索引擎 但是我遇到了一个愚蠢的问题 我想在表中输出多个 mysql 行 但是下面的代码会导致为找到的每一行创建一个单独的表 预先感谢您的帮助 searchTerm trim GET searchterm
  • Microsoft Graph SDK - 登录

    使用 MS Graph 是否可以只登录一次 目前 每当我调用 graphServiceClient 时 它都会要求我登录或选择登录的用户 有什么方法可以避免选择登录用户的过程吗 提前致谢 目前 这就是我初始化 graphService 的方
  • FQL 错误 102 需要用户会话进行重复查询

    我有一个功能齐全的 FQL 查询 但是当第二次触发它时 我收到错误代码 102 需要用户会话 在我的应用程序上 我有一个自动完成朋友搜索功能 我正在使用 jquery ui 自动完成功能和使用 AJAX 的动态源 这是我的 PHP 函数 f