1

我正在使用带有更新的 FB PHP-SDK 3.2 的 A3M CodeIgniter 库。

我被迫从 2.x 更新,因为 Facebook 前几天停用了他们的“传统”连接方法,这就是 a3m 框架使用的方法。所以我更新到 SDK,现在由于多种原因无法使连接过程正常工作:

  1. 无限重定向getLoginUrl()
  2. CSRF state token does not match one provided错误(getLoginUrl()如果我有用户,则不使用)。
  3. 用户总是0,即使我在 FB 上登录。

我现在真的不知道该怎么做。

我的想法:

  • CodeIgniter 可能会剥离响应code/ state?没有把握
  • 身份验证失败/除了 CSRF 错误(不是来自 CI!)
  • 来自 FB 的无限重定向报告了许多问题(尤其是在 SO 上)
  • 许多关于 PHP SDK 的 CSRF 问题报告的问题。

REF:
https ://github.com/facebook/facebook-php-sdk - FB SDK
https://github.com/pengkong/A3M-for-CodeIgniter-2.0 - A3M 框架(我参与管理)。

想法?

4

2 回答 2

2

销毁会话以$facebook->destroySession()获取用户 0。

关于 2 Facebook SDK 代码在同一处理程序中检查两次令牌时存在错误。

我编辑了这样的getCode函数facebook.php

protected function getCode() {
    if (!isset($_REQUEST['code']) || !isset($_REQUEST['state']) || $this->state === null) {
      return false;
    }
    if ($this->state === $_REQUEST['state']) {
        // CSRF state has done its job, so clear it
        $this->state = null;
        $this->clearPersistentData('state');
        return $_REQUEST['code'];
    }
    self::errorLog('CSRF state token does not match one provided.');

    return false;
}

更清楚,如果调用两次,则不会声明无效令牌。

需要明确的是,如果例如:

$facebook->getUser();然后在同一个处理程序中,$facebook->getLogoutUrl()然后getCode()调用两次,从而导致错误消息无效

于 2013-12-01T15:28:23.673 回答
0

尝试将 modules/account/helper 中的 fb_ca_chain_bundle.crt 替换为https://github.com/facebook/facebook-php-sdk/tree/master/src中的那个

于 2012-12-26T09:49:16.420 回答