我正在使用以下URL来获取用于管理页面和页面事件的Facebook身份验证令牌...
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错误。我基本上必须在每次重新登录时重新生成身份验证令牌。
有人可以帮助我了解为什么会发生这种情况以及如何解决吗?
您希望销毁会话$facebook->destroySession()
,而不是使令牌无效。注销是使令牌失效的方法之一。这是预期的操作。
销毁会话会将用户从应用中注销,但不会使令牌失效。看到您正在将其保存到数据库,您可能请求访问时间超过两个小时,这超出了短期令牌的限制。
此外,当您使用页面时,您可以在 https://developers.facebook.com/roadmap/offline-access-removal/中使用方案 5
当用户向应用授予manage_pages权限时,该应用能够 获取用户管理的页面的页面访问令牌 查询 [用户 ID]/帐户图形 API 端点。随着迁移 启用,当使用短期用户访问令牌查询此令牌时 终结点,获取的页面访问令牌也是短暂的。
将短期用户访问令牌交换为长期访问 令牌使用前面介绍的终结点和步骤。通过使用 长期用户访问令牌,查询 [用户 ID]/帐户端点 现在将为以下页面提供不会过期的页面访问令牌 用户管理。这也适用于使用未过期的查询 通过已弃用offline_access获取的用户访问令牌 许可。