【问题标题】:Facebook auth token stops working after logging outFacebook 身份验证令牌在注销后停止工作
【发布时间】:2013-10-11 15:12:04
【问题描述】:

我正在使用以下 URL 获取 Facebook Auth Token 来管理页面和页面事件...

https://www.facebook.com/dialog/oauth?client_id=CLIENTID&redirect_uri=REDIRECTURL&scope=manage_pages,create_event&response_type=token

这将通过授权过程并返回令牌,该令牌将保存在我的数据库中。然后,我尝试执行以下操作来检索参加页面活动之一的人的缩略图...

function fbEventRSVPPhotos($eventID){
    $authToken = eto_get_option('eto_auth_fbauthtoken') //pulled from database;
    $json = file_get_contents("https://graph.facebook.com/" . $eventID ."/attending?access_token=" . $authToken);
    $attendees = json_decode($json, true);
    echo '<div class=attendee-photos>';
    foreach($attendees['data'] as $attendee) {
        echo '<img class="facebook-thumb toggleTooltip" title="' . $attendee['name'] . ' is attending" src="https://graph.facebook.com/' . $attendee['id'] . '/picture?type=square">';
    }
    echo '</div>';
}

当我登录到 Facebook 时,此功能非常有用,但是一旦我退出,我会得到以下...

Warning: file_get_contents(https://graph.facebook.com/MYEVENTID/attending?access_token=MYTOKEN) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in PATHTOSCRIPT on line 94 Warning: Invalid argument supplied for foreach() in PATHTOSCRIPT on line 97

然后即使在重新登录后它仍会继续显示此 PHP 错误。我基本上每次重新登录时都必须重新生成身份验证令牌。

谁能帮我理解为什么会发生这种情况以及如何解决?

【问题讨论】:

  • 我认为这是预期的行为。更多信息请查看this Article
  • 场景 4:用户退出 Facebook 听起来像是我的问题,但他们之所以会发生这种情况是因为我在身份验证时没有要求offline_access,但是offline_access 已被弃用,我不能再请求它了。在没有离线访问的情况下如何解决或解决此问题?
  • 我已经有一段时间没有使用 Facebook API 进行过多的工作了(它每个月左右都会更改),但据我所知,您可以获得的最大令牌是持续 60 天的令牌(只要用户不注销等)。 Facebook 发布了一些关于迁移的信息here
  • 所以,如果我正确理解这一点,除非我登录到管理页面事件的 Facebook 帐户,否则我将无法从具有任何访问权限的事件中提取 RSVP 信息令牌,因为offline_access 被禁用?

标签: php authentication facebook-php-sdk


【解决方案1】:

您想销毁会话$facebook-&gt;destroySession(),而不是使令牌无效。注销是使令牌无效的方法之一。这是预期的操作。

Destroying the session 将使用户退出应用程序,但不会使令牌无效。看到您将其保存到数据库中,您可能请求访问超过两个小时,这超出了短期令牌的限制。

此外,当您使用页面时,您可以在https://developers.facebook.com/roadmap/offline-access-removal/ 使用场景 5

当用户授予应用程序 manage_pages 权限时,应用程序能够 获取用户管理的页面的页面访问令牌 查询 [User ID]/accounts Graph API 端点。随着迁移 启用,当使用短期用户访问令牌查询此 端点,获得的页面访问令牌也是短暂的。

将短期用户访问令牌交换为长期访问 使用前面解释的端点和步骤的令牌。通过使用 长期用户访问令牌,查询 [User ID]/accounts 端点 现在将为以下页面提供不会过期的页面访问令牌 用户管理。这也适用于使用非过期查询 通过已弃用的 offline_access 获取的用户访问令牌 权限。

【讨论】:

  • 请原谅我太天真了,但是如果我只使用上面的 Auth URL 和代码函数,我到底应该在哪里插入 $facebook-&gt;destroySession()? ://
  • @JodyHeavener 无论您想在哪里注销。您究竟是如何退出的?
猜你喜欢
  • 2018-09-28
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 2023-03-12
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多