facebook访问令牌仅在一个页面上工作

时间:2012-12-06 14:28:40

标签: php facebook facebook-graph-api yii facebook-php-sdk

我的应用程序在过去3个月内运行良好,由于Facebook的一些变化而遇到了一个新问题。当我获得访问令牌时:

$facebook->getAccessToken();

它返回一个有效的令牌并获取用户信息。但在另一个页面上,我再次使用相同的函数来获取访问令牌,并获得包括app Id在内的无效访问令牌。 我试图获取访问令牌并将其保存到会话并在另一个页面上使用,但它显示异常OAuthException: An active access token must be used to query information about the current user. 但令牌有效,我已经检查了here

可能是“dec 5 , 2012 changes”的原因吗? 我认为我的申请令牌有效期不到一分钟。 请帮帮我。

码 - >

$facebook = Yii::app()->facebook;
try {
    $facebook_uid = $facebook->getUser(); 

    $accessToken = $facebook->getAccessToken();
    $fbuser = $facebook->api('/me');

 }catch(Exception $e) {

     $access_token = $_SESSION['fb_396582000367255_access_token'];
     $facebook->setAccessToken($access_token);
 }

3 个答案:

答案 0 :(得分:5)

这是一个错误https://developers.facebook.com/bugs/404450666302585,但你可以使用Shawn Carter的工作。如果您确实使用了他的解决方法,则需要阻止Facebook SDK清除会话。这就是你唯一一次上班的原因。这样做的原始和非常脏的方法是修改facebook.php方法以清除所有持久数据。

protected function clearAllPersistentData() {
  return;
  foreach (self::$kSupportedKeys as $key) {
      $this->clearPersistentData($key);
  }
}

除了它为其他人工作(谁没有设置会话),你需要让facebook做一次它的事情。所以我正在做的是:

$tok = $facebook->getAccessToken();

if(strpos($tok, $config["appId"]) == 0 && isset($_SESSION["fb_" . $config["appId"] . "_access_token"]))
{
    $facebook->setAccessToken($_SESSION["fb_" . $config["appId"] . "_access_token"]);
    $tok =$_SESSION["fb_" . $config["appId"] . "_access_token"];
}

请注意,这一切都很脏。由于你已经通过清算会议混淆了水,你还需要自己清理会话以处理其他身份验证情况,例如用户退出,删除然后添加你的应用程序等等......等等您可以在短期内完成此操作,直到他们修复SDK,不要将其留在您的代码中。

答案 1 :(得分:2)

试试这个。那些无序的事情,你在try catch的else开关中设置了令牌。

$facebook = Yii::app()->facebook;
try {
    $facebook_uid = $facebook->getUser(); 
     $access_token = $_SESSION['fb_396582000367255_access_token'];
     $facebook->setAccessToken($access_token);
    //$accessToken = $facebook->getAccessToken();
    $fbuser = $facebook->api('/me');

 }catch(Exception $e) {


 }

答案 2 :(得分:1)

尝试fbb> sr _396582000367255 access_token而不是fb_396582000367255 access_token