2012-04-13 148 views
0

我正在构建一个将朋友数据导入本地数据库的应用程序,并且工作正常。访问cron的用户配置文件

我正在尝试创建一个由每日cron运行的脚本,该脚本将迭代本地数据库中的用户配置文件并更新好友数据。

我正在使用PHP SDK。

我已启用depreacte_offline_access标志。

这是否意味着访问令牌将在60天内自动过期,还是我需要做其他事情?

如果用户在同一浏览器中签出应用程序或Facebook,我仍然可以从cron脚本中检索配置文件数据?

我是正确的思维,所有我需要做的是retrive与访问令牌:

$access_token = $facebook->getAccessToken(); 

然后将其存储在数据库中,然后设置访问令牌:

$facebook->setAccessToken($new_access_token); 

然后用

$facebook->getUser('/me'); 

另外我如何查看访问令牌的过期日期?

下面是一个脚本来遍历和retreive配置文件,但如果我在浏览器中运行它只适用于当前登录用户或我得到异常“OAuthException:错误验证访问令牌:会话无效,因为用户注销“。

<?php 
require_once(THEME_INCLUDES_PATH . 'facebook.php'); 

$config = array(); 
$config['appId'] = APP_ID; 
$config['secret'] = APP_SECRET; 
$config['fileUpload'] = false; // optional 

$facebook = new Facebook($config); 

$sql = "SELECT `access_token` FROM `fb_user`"; 
$result = $db1->db_query($sql); 

while($details = $db1->db_fetch_array($result)){ 

    if($details['access_token']){ 

     $facebook->setAccessToken($details['access_token']); 
     $fb_user = $facebook->getUser('/me'); 

     if($fb_user){ 

      try { 
       $fb_profile = $facebook->api('/me');   
       print_r($fb_profile); 
      } 

      catch (FacebookApiException $e){ 
       echo $e; 
       $fb_user = false; 
      } 
     } 
    } 
} 
?> 

回答

0

您现在没有办法做到现在您已经弃用offline_access的内容。

这个想法是,当用户实际与您的应用程序交互时,您的应用程序只能访问用户数据。 访问令牌有效期约为60天(取决于您如何得到它),但由于各种原因(例如用户移除您的应用,更改密码等等),它可能会失效。

当发生这种情况或者到期日期到来时,为了获得新的令牌,你不能做任何事情,除非用户重新连接你的应用程序,然后你可以得到一个新的令牌或者扩展一个新的令牌。

当用户实际与您的应用程序进行交互时,您将不得不更新所有数据,而不是稍后。

official post about the deprecation of the offline_access它说:你能得到一个 有效的“授权码”,以能够再次使服务器端OAuth 调用之前

用户必须访问应用程序。应用程序将无法设置 试图自动延长到期时间的背景/ cron作业,因为 “授权码”是短暂的并且已过期。


编辑

官爵:Removal of offline_access Permission描述了一个新的端点延长有效的访问令牌,在两种情况之一:如果应用程序从一个client-side flow或签名的请求得到了令牌:

使用下面的新端点,您将能够延长现有的有效access_token的 到期时间。如果 access_token最初是通过客户端OAuth调用产生的,或者 通过signed_request产生,则该端点实际上会返回一个新的 access_token。

它还指出:

如果的access_token从服务器端OAuth呼叫产生时, 所得的access_token将具有更长的过期时间。

所以我的建议很简单,使用server-side flow来生成访问令牌。

至于令牌无效的事件列表,他们没有一个完整的清单,但你可以在同一页面中找到有关它的信息:

处理过期的令牌,用户密码更改,卸载应用程序和用户 注销

无论如果您的应用程序所要求的权限offline_access,应用程式,其中 用户更改他们的密码,deauthorizes一个应用程序,或注销 应该在正常情况下,处理过期的访问令牌。更多 关于这些案例的信息,包括一个简单的代码解决方案,导致 到统一的用户体验可以在blog post找到。

你可以检查这个文档:Handling Invalid and Expired Access Tokens

+0

这基本上是正确的,但由于其他原因令牌可能失效(正如我在我的回答中提到的)。 – 2012-04-14 09:53:46

+0

我的理解是,一旦用户从站点获得有效访问权限,cron脚本将能够访问其配置文件,但不会延长访问令牌的过期时间。所以主要问题是启用offline_access标志似乎不会自动使过期日期持续60天,而我不确定我需要做什么?另一件事是,似乎没有一个可以导致访问令牌失效的完整记录的事件列表。 – 2012-04-14 09:55:42

+0

不要删除您的评论,这会让以后有谁阅读它时感到困惑。我用更多的信息编辑了我的答案。 – 2012-04-14 10:12:58