0

我正在使用以下 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 错误。我基本上每次重新登录时都必须重新生成身份验证令牌。

有人可以帮我理解为什么会发生这种情况以及如何解决吗?

4

1 回答 1

0

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

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

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

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

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

于 2013-10-11T18:32:09.537 回答