1

FB PHP-SDK 3.2 を更新した A3M CodeIgniter ライブラリを使用しています。

先日、Facebook が「従来の」接続方法を廃止したため、2.x からの更新を余儀なくされました。これは、a3m フレームワークが使用していたものです。そのため、SDK に更新したところ、いくつかの理由で接続プロセスが機能しなくなりました。

  1. の無限リダイレクトgetLoginUrl()
  2. CSRF state token does not match one providedエラー(getLoginUrl()ユーザーを取得した場合は使用しません)。
  3. 0FBにログインしていても、ユーザーは常にです。

この時点で何をすべきか本当にわかりません。

私の考え:

  • CodeIgniter が応答を削除している可能性がありますcode/ state? わからない
  • 認証が失敗する / CSRF エラー以外のエラーはドロップされません (CI からではありません!)
  • FB からのこの無限リダイレクトに関して (特に SO で) 多くの問題が報告されています
  • PHP SDK での CSRF の問題について、多くの問題が報告されました。

参照:
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 について、同じハンドラーでトークンを 2 回チェックすると、Facebook SDK コードにバグがあります。

facebook.php次のように getCode 関数を編集しました。

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;
}

より明確にするために、2回呼び出された場合に無効なトークンを示しません。

明確にするために、関数は同じ url ハンドラーで 2 回呼び出すことができます。

$facebook->getUser();そして、同じハンドラー$facebook->getLogoutUrl()getCode()が 2 回呼び出されるため、無効なエラー メッセージが表示されます。

于 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 に答える