验证访问令牌时出错

时间:2012-01-30 06:51:47

标签: error-handling facebook

我偶尔会收到此错误:

  

致命错误:未捕获异常:190:验证访问令牌时出错:这可能是因为用户已注销或可能是由于系统错误。在第1053行的..base_facebook.php中抛出

问题是我在随机时间得到它,没有任何警告。我可以在几周内没有看到它,然后突然间它会出现。解决方案?你可以等一下。它会抛出此错误大约15分钟,然后您可以刷新它,它将允许您继续您正在做的事情。

我的问题是,这是我的问题吗?或者这是Facebook问题?如果有帮助,这是一个Facebook连接页面。我做了研究,发现它可能是由FQL查询引起的。但至少它不会一致吗?看起来它完全是随机的。这是我的FQL查询,以防万一。

$facebook->api(array('method' => 'fql.query','query' => "SELECT first_name,middle_name,last_name,email,affiliations FROM user WHERE uid=".$user));

以下是Base_Facebook的第1052-1071行,

protected function throwAPIException($result) {
$e = new FacebookApiException($result);
switch ($e->getType()) {
  // OAuth 2.0 Draft 00 style
  case 'OAuthException':
    // OAuth 2.0 Draft 10 style
  case 'invalid_token':
    // REST server errors are just Exceptions
  case 'Exception':
    $message = $e->getMessage();
  if ((strpos($message, 'Error validating access token') !== false) ||
      (strpos($message, 'Invalid OAuth access token') !== false)) {
    $this->setAccessToken(null);
    $this->user = 0;
    $this->clearAllPersistentData();
  }
}

throw $e;

}

谢谢

1 个答案:

答案 0 :(得分:10)

正如 How-To: Handle expired access tokens 中所写的那样(链接已破)开发者博客帖子

  

由于各种原因,用户的访问令牌可能会变为无效。在大多数情况下,如果超过expires字段指定的时间,它们可能会过期(默认情况下,访问令牌的生命周期为2小时)。许多开发人员没有意识到,如果用户更改密码,注销或者通过App Dashboard取消授权应用程序,访问令牌也会过期。您的应用处理此类情况非常重要。如果您的访问令牌过期,则需要重新获取有效的访问令牌。

在我们使用offline_access权限获取未过期的令牌(除非用户与应用程序相关联)之前,此权限现已弃用,请参阅Deprecation of Offline Access Permission以了解如何获取{{1}有更长的到期时间。

<强>更新
截至2012年8月Facebook PHP-SDK have added simple way of extending access_token(有关详细信息,请参阅How to extend access token validity since offline_access deprecation

更新2: 请注意,Facebook上关于过期令牌处理的原始博客帖子不再存在。可以使用新的文档来获取详细信息。 https://developers.facebook.com/docs/facebook-login/access-tokens/#extending