我偶尔会收到此错误:
致命错误:未捕获异常: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;
}
谢谢
答案 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