Facebook PHP SDK 处理访问令牌

2023-11-25

我已经爬行了很多不同的答案,但我仍然对我应该如何处理 Facebook 感到有点困惑访问令牌。 我遇到的主要问题之一是浏览器中存储的信息。例如,我登录应用程序,令牌过期,除非清除浏览器中的 cookie/应用程序设置,否则我无法再次登录。

我偶然发现了这个线程:自offline_access弃用以来如何延长访问令牌的有效性

这向我展示了如何通过 php 创建扩展访问令牌。

我的问题是:

1.我需要将访问令牌存储在任何地方吗?

2.当访问令牌过期或失效时会发生什么?目前,当短期访问权限到期时,我的应用程序就会停止工作。

3.我应该有什么方法来处理它们以检查它们是否已过期? 我正在使用 php sdk 并且基本上使用了标准 if( $user )... 像这样:

require 'sdk/src/facebook.php';

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

  $user = $facebook->getUser();

  if( $user ){
    try{
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
  }

  if (!$user){

    $params = array(
    'scope' => 'email',
    );

    $loginUrl = $facebook->getLoginUrl( $params );
        echo '<script type="text/javascript"> 
                window.open("'. $loginUrl .'", "_self"); 
                </script>';
                exit;

 } 
     if( $user ){

    $access_token = $facebook->getExtendedAccessToken();     

     $get_user_json = "https://graph.facebook.com/me?access_token=" 
       . $access_token;

// Rest of my code here...
}
  • 我还应该做些什么来处理令牌吗?

。我应该在页面之间传递访问令牌,还是可以在每个页面的顶部再次调用它,如下所示:

$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXX',
  'redirect_uri' => 'http://localhost:8000/',
));
     $token = $facebook->getExtendedAccessToken();

让我们来解答一下您的问题:

我需要将访问令牌存储在任何地方吗?

这取决于您的应用程序。首先问问自己,当用户在操作时,您是否需要代表他执行操作?not存在(未登录到您的应用程序)?
如果答案是yes,那么您需要扩展用户令牌,这可以在拥有有效的用户会话时通过调用此方法使用 PHP-SDK 来完成:setExtendedAccessToken().

您还应该参考这个文档:扩展访问令牌

当访问令牌过期或失效时会发生什么? ... 有什么办法我应该处理它们来检查它们是否 已经过期了吗?

这就是catch代码中的子句会派上用场,而仅限 facebook 示例logs错误 (error_log($e);)你应该处理它!

Facebook 已经有一个关于此的教程:操作方法:处理过期的访问令牌.

您还应该参考错误表并相应地调整您的代码。

我还应该做些什么来处理令牌吗?

往上看。

我应该在页面之间传递访问令牌还是可以 在每个页面的顶部再次调用它

您不需要执行任何操作,因为 PHP-SDK 将为您处理令牌;您是否注意到您正在打电话:$user_profile = $facebook->api('/me');不附加用户access_token?

SDK 从其末尾添加它,因此您不必担心它。

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

Facebook PHP SDK 处理访问令牌 的相关文章

随机推荐

  • 在 r 中按日期和时间对数据帧进行排序和排名

    我有一个数据框如下 最初它只是两列 变量 时间戳 包含日期和时间 和 演员 我将 时间戳 变量分解为 日期 和 时间 然后将 时间 进一步分解为 小时 和 分钟 然后给出以下结构 dataf lt structure list hours
  • Java/GWT 和 Scala/Lift 哪个框架更好?

    我想开始一个新的 Web 应用程序项目 但我对 GWT Java 或 Lift Scala 这两个框架感到困惑 所以我想听听您的意见我选择哪一个 根据我的项目要求 两者都很好 那么根据框架比较 请告诉我哪个好 我发现 GWT 对于客户端来说
  • 如何创建tabindex组?

    我正在尝试创建 tabindex 组 其中按组中的选项卡它总是在该组中旋转 直到另一个组通过 javascript 或手动聚焦 问题 是否可以在没有 JavaScript 的情况下做到这一点 如果不能 我该如何实现这一点 Here is j
  • Android Activity.getParent() 总是返回 null

    我这里有这个小功能 public Activity getRootActivity Activity a this while a getParent null a a getParent return a 但 a getParent 总是
  • 是否可以定义中缀函数?

    是否可以在 CoffeeScript 或纯 JavaScript 中定义我自己的中缀函数 运算符 例如我想打电话 a foo b or a foo b 代替 a foo b 或者 当 foo 是全局函数时 foo a b 有什么办法可以做到
  • Jupyter 笔记本部分以法语显示

    我在用着Jupyter用于 Python 编程Windows 10一些文本被翻译成法语 但不是全部 这使得它有点烦人 有人知道如何更改显示语言吗 我无法在互联网上找到答案 因为每次我搜索 语言 时 它都会向我显示编程语言 R Python
  • 使用地图应用 iOS 生成步行路线

    截至目前 我使用以下代码成功地从我的应用程序中使用地图应用程序生成了路线 NSString formattedGroceryAddress NSString stringWithFormat EnhancedUIActionSheet ac
  • Android:清除活动堆栈

    我的申请中有多项活动 而且流程非常复杂 当我单击注销应用程序时 导航到登录屏幕 用户可以通过取消按钮退出 调用system exit 0 当我退出或后退按钮时 系统从堆栈中调用一个活动 当我到达登录屏幕时 如何清除堆栈中的所有活动 调用fi
  • ng-if 和 ng-show/ng-hide 有什么区别

    我试图理解之间的区别ng if and ng show ng hide 但它们在我看来是一样的 选择使用其中之一时我应该记住什么区别吗 ngIf The ngIf指示删除或重新创建基于表达式的 DOM 树的一部分 如果表达式分配给ngIf计
  • Chrome 中的滚动到视图

    I use var el document getElementById centd el scrollIntoView true 滚动到特定位置 在每个浏览器中它都工作正常 但在 Chrome 中 当页面加载时 它会滚动到该点 但在一两秒
  • 接收器停止接收奥利奥

    我了解服务等受到限制 因此我的接收器已停止在 Android Oreo 中工作 我有这段代码启动服务 Intent intent new Intent this MyService class intent putExtra Time lo
  • 从 Docker buildkit 获取容器 ID 以进行交互式调试

    众所周知 您可以运行docker commit针对失败的构建过程拍摄容器快照以用于调试目的 容器 ID 是从running in
  • 从本地文件更新 MySQL 表

    我的数据库中有一个表 我想更新本地文件上脱机的列 文件本身有两列 与表中的 ID 列相对应的 ID 以及 实际值 我已经能够使用创建新行 LOAD DATA INFILE file txt INTO TABLE table FIELDS T
  • 三星 Galaxy SIII (GLES) 中的噪声算法失败

    我正在努力让下一个简单的算法在 Samsung Galaxy SIII 中运行 float rand vec2 co return fract sin dot co xy vec2 12 9898 78 233 43758 5453 vec
  • Python:根据对象的属性对对象列表进行排序[重复]

    这个问题在这里已经有答案了 作为序言 我已经查看了与这个问题相关的帖子 但他们还没有完全回答我的问题 所以我只想知道如何通过两种方式根据对象的属性对对象列表进行排序 如果属性是字符串 按字母顺序排列 如果属性是整数 按数字顺序执行 这是我的
  • Eclipse 执行错误的 Java 文件

    我正在使用 Eclipse 来编写和测试 Java 我是一个初学者 所以我对Eclipse一无所知 当我尝试运行我刚刚编写的 Java 文件时 就会出现问题 它不执行打开的文件 而是执行我之前成功运行的文件 我在同一个默认包中有几个文件 包
  • Mac OS Mojave 上的 Ruby 2.4:找不到图像...与 openssl.bundle 相关

    所以我在 Mac OS Mojave 上将 Ruby 升级到了 2 4 9 我在安装 gem 时遇到问题 proj gem install google cloud vision ERROR Loading command install
  • Python - 用于将文本拆分为句子的正则表达式(句子标记化)[重复]

    这个问题在这里已经有答案了 我想从字符串中列出句子 然后将其打印出来 我不想使用 NLTK 来执行此操作 因此 它需要在句子末尾的句点上分割 而不是在小数点或缩写或名称标题上分割 或者如果句子有 com 这是对正则表达式的尝试 但不起作用
  • .NET 验证码 https

    我们已经开始使用 ASP NET recaptcha 控件 它运行良好 但我们的要求之一是所有出站流量都通过 HTTPS 我知道 recaptcha 支持 https 但不清楚在使用 ASP NET 插件选项时如何配置 或者即使它是可配置的
  • Facebook PHP SDK 处理访问令牌

    我已经爬行了很多不同的答案 但我仍然对我应该如何处理 Facebook 感到有点困惑访问令牌 我遇到的主要问题之一是浏览器中存储的信息 例如 我登录应用程序 令牌过期 除非清除浏览器中的 cookie 应用程序设置 否则我无法再次登录 我偶