【问题标题】:Facebook authentication issueFacebook 身份验证问题
【发布时间】: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-&gt;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


【解决方案1】:

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

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

【讨论】:

  • 这太棒了:) 我在最后检查过它也很完美。认为我给出的线路对我有用,但不适用于我的朋友,而你提供给我的线路对我们双方都有效:) 让我也编辑我的答案,这样看到这个问题的人就不会混淆了。
【解决方案2】:

这条线适合我

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

但是正如您所说,它在 safari 中不起作用,因为它没有修补它来存储 cookie,那么您可以使用替代方法 关闭cookies

$facebook = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => SECRET,
    'cookie' => false
));

并尝试在身份验证后使用访问令牌 @access_token 是在初始 POST 请求中传递到您的画布页面的 oauth access_token。

$facebook->api('/me?access_token='.$access_token);

希望有效果

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2014-12-17
    • 2019-03-25
    • 2013-07-22
    相关资源
    最近更新 更多