2013-10-11 68 views
0

我使用以下网址获得Facebook的身份验证令牌用于管理页面和页面事件后的工作...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错误。我已经基本上每次我重新登录时间来重新生成身份验证令牌。

有人能帮助我了解为什么会发生这种情况以及如何解决?

+0

我认为这是预期的行为。查看[这篇文章](https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/)了解更多信息。 – Dragony

+0

*场景4:用户注销Facebook *听起来像是我的问题,但是他们推测发生这种情况的原因是因为我没有在验证时询问'offline_access',但'offline_acces'已过时,我不能再请求它。我该如何解决这个问题或者在没有离线访问的情况下解决? –

+0

我有一段时间没有在Facebook API上工作太多(它每个月都在变化),但据我所知,最多可以得到的是一个持续60天的令牌(只要用户不会“注销等)。 Facebook发布了一些关于迁移的信息[这里](https://developers.facebook.com/roadmap/offline-access-removal/)。 – Dragony

回答

0

你想破坏会话$facebook->destroySession(),而不是使令牌失效。注销是令牌失效的方法之一。这是预期的行动。

Destroying the session会将用户从应用程序中注销,但不会使令牌失效。看到您将它保存到数据库中,您可能请求访问时间超过两小时,这超过了短时间令牌的限制。

另外,作为您使用的页面,您可以在https://developers.facebook.com/roadmap/offline-access-removal/

当用户授予应用程序的manage_pages许可使用情景5,应用程序能够 获得页面的访问令牌,用户的管理权限页面通过 查询[User ID]/accounts Graph API端点。在启用迁移 的情况下,如果使用短期用户访问令牌来查询此端点,则获得的页面访问令牌也是短暂的。

使用前面介绍的端点和步骤,交换短期用户访问令牌以获得长期存取令牌 。通过使用长期用户访问令牌,查询[用户ID] /帐户端点 现在将提供页面访问令牌,这些令牌不会在用户管理的页面过期。这也适用于使用通过已弃用的offline_access 权限获取的未到期的 用户访问令牌进行查询时的情况。

+0

请原谅我的天真,但如果我只使用上面的验证URL和代码函数,我会在哪里插入'$ facebook-> destroySession()'? :/ –

+0

@JodyHeavener无论你想注销。你到底怎么注销? – phwd