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

Posted

技术标签:

【中文标题】facebook Uncaught OAuthException:必须使用活动访问令牌来查询有关当前用户的信息【英文标题】:facebook Uncaught OAuthException: An active access token must be used to query information about the current user 【发布时间】:2011-08-27 10:45:54 【问题描述】:

我一直在努力找出这是怎么回事。 我的脚本运行了一段时间后突然停止了一半。

我正在访问 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);

【问题讨论】:

【参考方案1】:

只需检查当前 Facebook 用户 ID $user,如果返回 null,则需要重新授权用户(或使用自定义 $_SESSION 用户 ID 值 - 不推荐)

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);

我已经写了tutorial,关于如何将图片上传到用户的墙上。

【讨论】:

+1 ...感谢您的回答..这让我大吃一惊...“我”正在寻找有效的 facebook 会话...而“facebook user_id”没有...只是我想要什么 在这里我们正在检查应用程序的权限?第一次它显示了 goto 应用程序的 facebook 对话框。我点击了它。之后,当我打开页面时,它显示空白页面跨度> @VIJESH,您使用的是上面的代码吗?你知道这是不完整的代码,只是为了让你开始。 谢谢,我现在已经解决了 50% 的问题,如果你能帮助我在这里有类似的主题 ***.com/questions/43632458/… :(【参考方案2】:

用途:

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

而不是

$facebook->api('/me')

它有效。

【讨论】:

这不是错误;正如对已接受答案的第一条评论所说......“我”寻找有效的 facebook 会话,而“facebook user_id”则没有【参考方案3】:

所以我遇到了同样的问题,但这是因为我保存了访问令牌但没有使用它。这可能是因为我因为到期日而超级困,或者也许我只是没有考虑过!但万一其他人处于同样的情况:

当我登录用户时,我会保存访问令牌:

$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 ...)

【讨论】:

我爱你这个答案!这使我免于解决 12 月 5 日新的重大更改时遇到的问题。这几天我一直在研究这个。 亲爱的上帝,刚刚花了 2 个小时寻找这个,我也忘了设置我保存的令牌。呵呵。【参考方案4】:

一定时间后,您的访问令牌会过期。

为防止这种情况,您可以在身份验证期间请求“offline_access”权限,如下所述:Do Facebook Oauth 2.0 Access Tokens Expire?

【讨论】:

【参考方案5】:

遇到了同样的问题,解决方案是重新授权用户。 在这里检查:

<?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>

保存项目并在我的测试环境中打开它再次工作。和我一样,您可以评论您之前的代码并尝试。

【讨论】:

【参考方案6】:

当我尝试在没有身份验证的情况下获取用户信息时遇到了同样的问题。

在任何请求之前检查您是否已登录。

 $uid = $facebook->getUser();

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

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

【讨论】:

【参考方案7】:

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

希望这能帮助您解决问题。

【讨论】:

以上是关于facebook Uncaught OAuthException:必须使用活动访问令牌来查询有关当前用户的信息的主要内容,如果未能解决你的问题,请参考以下文章

Uncaught (in promise)

Uncaught (in promise):消息端口在收到响应之前关闭

出现错误 - Uncaught (in promise) DOMException: play() failed 因为用户没有先与文档交互

AngularJS Uncaught SyntaxError: Unexpected token :

已获取 Instagram API 访问权限

解决Uncaught (in promise) reason的问题