未捕获的OAuthException:必须使用活动的访问令牌来查询有关当前用户的信息

我一直在努力研究这个情况。 我的脚本工作得很好,突然一半停下来。

我正在访问API,并获取访问令牌。 使用访问令牌,我可以访问用户的公共信息就好了。 但是,当我尝试发布信息到他们的FB帐户,我得到这个错误。

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. 

有什么想法发生在这里? 我也在我的网站上使用会话来跟踪内部用户ID。 不知道我的会话是否会造成问题。

这是我的上传脚本,我得到一个错误。

 require 'facebook/src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => '12345678', 'secret' => 'REMOVED', 'fileUpload' => true, 'cookie' => true, )); $facebook->setFileUploadSupport(true); $me = null; // Session based API call. if ($session) { try { $uid = $facebook->getUser(); $me = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); } } // login or logout url will be needed depending on current user state. if ($me) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(); } $photo_details = array('message' => 'my place'); $file='photos/my.jpg'; //Example image file $photo_details['image'] = '@' . realpath($file); $upload_photo = $facebook->api('/me/photos', 'post', $photo_details); 

只要检查当前的Facebook用户ID $user ,如果它返回null,那么你需要重新授权用户(或使用自定义$_SESSION用户ID值 – 不build议)

 require 'facebook/src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'APP_ID', 'secret' => 'APP_SECRET', )); $user = $facebook->getUser(); $photo_details = array('message' => 'my place'); $file='photos/my.jpg'; //Example image file $photo_details['image'] = '@' . realpath($file); if ($user) { try { // We have a valid FB session, so we can use 'me' $upload_photo = $facebook->api('/me/photos', 'post', $photo_details); } catch (FacebookApiException $e) { error_log($e); } } // login or logout url will be needed depending on current user state. if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { // redirect to Facebook login to get a fresh user access_token $loginUrl = $facebook->getLoginUrl(); header('Location: ' . $loginUrl); } 

我写了一篇关于如何上传图片到用户墙上的教程 。

使用:

 $facebook->api('/'.$facebook_uid) 

代替

 $facebook->api('/me') 

有用。

所以我有同样的问题,但这是因为我保存访问令牌,但没有使用它。 这可能是因为我因为到期date而昏昏欲睡,或者我只是没有想到! 但是,如果其他人处于相同的情况下,

当我login用户时,我保存访问令牌:

 $facebook = new Facebook(array( 'appId' => <insert the app id you get from facebook here>, 'secret' => <insert the app secret you get from facebook here> )); $accessToken = $facebook->getAccessToken(); //save the access token for later 

现在,当我向Facebook发出请求时,我只是做这样的事情:

 $facebook = new Facebook(array( 'appId' => <insert the app id you get from facebook here>, 'secret' => <insert the app secret you get from facebook here> )); $facebook->setAccessToken($accessToken); $facebook->api(... insert own code here ...) 

经过一段时间后,您的访问令牌到期。

为了防止这种情况,您可以在身份validation期间请求“offline_access”权限,如下所述: Facebook Oauth 2.0访问令牌是否过期?

有同样的问题,解决scheme是重新授权用户。 在这里检查:

 <?php require_once("src/facebook.php"); $config = array( 'appId' => '1424980371051918', 'secret' => '2ed5c1260daa4c44673ba6fbc348c67d', 'fileUpload' => false // optional ); $facebook = new Facebook($config); //Authorizing app: ?> <a href="<?php echo $facebook->getLoginUrl(); ?>">Login con fb</a> 

保存的项目,并打开我的testing环境,它再次工作。 正如我所做的,你可以评论你以前的代码,并尝试。

试图在没有身份validation的情况下获取用户信息时遇到同样的问题。

在请求之前检查你是否有loggen。

  $uid = $facebook->getUser(); if ($uid){ $me = $facebook->api('/me'); } 

上面的代码应该可以解决你的问题。

我有同样的问题,但我可以通过清理我的浏览器中的cookie和caching(ctrl+shift+R)来解决这个问题。 另外,您必须确保您的访问令牌处于活动状态。

希望这会帮助你解决你的问题。