hem*_*mc4 2 php facebook yii facebook-graph-api facebook-php-sdk
我的应用程序在过去3个月内运行良好,由于Facebook的一些变化,遇到了一个新问题.当我获得访问令牌时:
$facebook->getAccessToken();
Run Code Online (Sandbox Code Playgroud)
它返回一个有效的令牌并获取用户信息.但在另一个页面上,我再次使用相同的函数来获取访问令牌,并获得包括app Id在内的无效访问令牌.我试图获取访问令牌并将其保存到会话并在另一个页面上使用,但它显示异常OAuthException: An active access token must be used to query information about the current user.
但令牌有效,我在这里检查 过
可能" 2012年12月5日变化 "的原因是什么?我认为我的申请令牌有效期不到一分钟.请帮我.
代码 - >
$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);
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误https://developers.facebook.com/bugs/404450666302585但你可以使用Shawn Carter的工作.如果您确实使用了他的解决方法,则需要阻止Facebook SDK清除会话.这就是你唯一一次上班的原因.这样做的原始和非常脏的方法是修改facebook.php方法以清除所有持久数据.
protected function clearAllPersistentData() {
return;
foreach (self::$kSupportedKeys as $key) {
$this->clearPersistentData($key);
}
}
Run Code Online (Sandbox Code Playgroud)
除了它为其他人工作(谁没有设置会话),你需要让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"];
}
Run Code Online (Sandbox Code Playgroud)
请注意,这一切都很脏.由于你已经通过清算会议混淆了水,你还需要自己清理会话以处理其他身份验证情况,例如用户退出,删除然后添加你的应用程序等等......等等您可以在短期内完成此操作,直到他们修复SDK不会将其留在您的代码中.