Facebook身份验证问题

时间:2011-05-09 15:14:13

标签: php facebook facebook-graph-api

我对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/

2 个答案:

答案 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);

希望它有效