- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序在过去 3 个月内运行良好,但由于 Facebook 中的一些更改遇到了新问题。当我通过以下方式获得访问 token 时:
$facebook->getAccessToken();
它返回一个有效的 token 并获取用户信息。但是在另一个页面上,我再次使用相同的函数来获取访问 token ,但我得到了包括应用程序 ID 在内的无效访问 token 。我试图获取访问 token 并将其保存到 session 并在另一个页面上使用,但它显示异常 OAuthException: 必须使用事件访问 token 来查询有关当前用户的信息。
但是 token 是有效的,我已经检查过了here
“dec 5 , 2012 changes”可能是这个原因吗?我认为我的应用程序 token 的有效期不到一分钟。请帮助我。
代码-->
$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);
}
最佳答案
这是一个错误 https://developers.facebook.com/bugs/404450666302585但您可以使用 Shawn Carter 的解决方法。如果您确实使用他的解决方法,则需要防止 Facebook SDK 清除 session 。这就是你只让它工作一次的原因。一种粗鲁且非常肮脏的方法是修改 facebook.php 方法以清除所有持久数据。
protected function clearAllPersistentData() {
return;
foreach (self::$kSupportedKeys as $key) {
$this->clearPersistentData($key);
}
}
除了为其他人(未设置 session 的人)工作之外,您还需要允许 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"];
}
请注意,这一切都非常肮脏。由于您已经用清除 session 的事情弄混了水,因此您还需要自己清除 session 以处理其他身份验证情况,例如用户注销,删除然后重新添加您的应用程序等等......所以虽然您可以在短期内执行此操作,直到他们修复 SDK,不要将其留在您的代码中。
关于php - Facebook 访问 token 仅在一个页面上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745707/
我是一名优秀的程序员,十分优秀!