脸书身份验证问题


Facebook authentication issue

我对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应用程序的工作样本,或者可以看到我上面的代码片段存在固有问题?

提前谢谢。

编辑:忘了提到它与上面的代码一起进入重定向循环,但是如果我从调用中删除参数数组$facebook->getLoginUrl()那么它最终会脱离循环并脱离Facebook本身,而是转到Facebook的iFrame容器之外的画布URL。例如,URL 变为 http://www.woohoobingo.com/facebookv2/?session={...} 而不是 http://apps.facebook.com/woohoobingo/

破解

了它。在我的index.php文件顶部使用了以下 HTTP 标头:

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

这条线对我有用

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

但正如您所说,它在 safari 中不起作用,因为它不会修补它来存储 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);

希望它有效