我的应用程序在过去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);
}
答案 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