我对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 iFrame应用程序的工作样本,或者可以看到我上面的代码片段本身有什么问题?
提前致谢。
编辑:忘记提及它使用上面的代码进入重定向循环,但如果我从$facebook->getLoginUrl()
调用中删除参数数组,那么它最终会突破循环并且从Facebook本身出来,转而去Facebook的iFrame容器之外的画布URL。例如,网址变为http://www.woohoobingo.com/facebookv2/?session={...}
而不是http://apps.facebook.com/woohoobingo/
。
答案 0 :(得分:2)
破解了。在我的index.php
文件的顶部使用了以下HTTP标头:
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
答案 1 :(得分:0)
此行适用于我
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
但正如你所说它不适用于safari,因为它不会修补它来存储cookie,那么你可以使用另一种选择 关闭cookie
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => SECRET,
'cookie' => false
));
并在验证后尝试使用访问令牌@access_token是在初始POST请求中传递给您的画布页面的oauth access_token。
$facebook->api('/me?access_token='.$access_token);
希望它有效