【发布时间】:2011-05-09 15:14:12
【问题描述】:
我对 Facebook 的平台不断变化、结构脆弱以及缺乏体面和最新的文档感到有点生气。
目前,我正在从 FBML 迁移一个应用程序,因为它已被弃用到 iFrame 应用程序,并且在身份验证时遇到问题。目前,我有一个全局引导脚本,该脚本在每个页面视图上加载,其中包含以下与身份验证有关的内容:
// attempt to authenticate against Facebook platform
require dirname(__FILE__) . '/facebook.php';
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => SECRET,
'cookie' => true
));
$session = $facebook->getSession();
$user = null;
if ($session) {
try {
$uid = $facebook->getUser();
$user = $facebook->api('/me');
}
catch (FacebookApiException $e) {
error_log($e);
}
}
if (!$user) {
$loginUrl = $facebook->getLoginUrl(array(
'req_perms' => 'email,user_likes',
'next' => CANVAS_URL.'/'
));
echo '<script>top.location.href="'.$loginUrl.'";</script>';
exit;
}
这是根据官方 Facebook PHP SDK 和开发人员文档中的示例汇总的,但是当第一次加载应用程序时,它只是在一个讨厌的重定向循环中转来转去,我不知道从哪里开始调试,因为我没有什么可做的从 Facebook 参考。
是否有人获得了验证 Facebook iFrame 应用程序的工作示例,或者可以看到我上面的代码 sn-p 存在固有问题?
提前致谢。
编辑: 忘了提到它使用上面的代码进入重定向循环,但是如果我从$facebook->getLoginUrl() 调用中删除参数数组,那么它最终会跳出循环并跳出Facebook 本身,而不是转到 Facebook 的 iFrame 容器之外的我的画布 URL。例如,URL 变为http://www.woohoobingo.com/facebookv2/?session={...} 而不是http://apps.facebook.com/woohoobingo/。
【问题讨论】:
-
您是否尝试将一些语句放在不同的行上,以便您了解代码从何处重定向您。
-
我试过回显
$loginUrl的值,是的。重定向到调用身份验证请求的同一页面是否会破坏事情?我原以为 SDK 会从身份验证中获取令牌。请求? -
您使用的是哪个浏览器? IE 8 和 safari 不允许从 iframe 存储 cookie。请先尝试使用 firefox,如果问题解决了,请告诉我,我可以为您提供 IE cookie 存储问题的解决方案。
-
啊。我正在使用使用 WebKit 的 Google Chrome。这会是问题吗?
-
header ('P3P: CP = "IDC DSP COR ADM DEVI TAII PSA PSD OUR Ivai IVDi CONI HIS IND CNT"');尝试在页面顶部添加这一行。希望它有效
标签: php facebook facebook-graph-api