未捕获的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)
来解决这个问题。 另外,您必须确保您的访问令牌处于活动状态。
希望这会帮助你解决你的问题。