0

Facebook SDK に問題があります。次のエラーが発生し続けます。

CSRF 状態トークンが提供されたトークンと一致しません

以前に提案された RewriteRule ルールはありませんので、それは問題ではありません。どこに問題があるかを知るために、 getCode() 関数を次のように変更しました。

  protected function getCode() {
if (isset($_REQUEST['code'])) {
  if ($this->state !== null &&
      isset($_REQUEST['state']) &&
      $this->state === $_REQUEST['state']) {

    // CSRF state has done its job, so clear it
    $this->state = null;
    $this->clearPersistentData('state');
    return $_REQUEST['code'];
  } else {
    $add = "";
    if ($this->state == null)
        $add .= " State is null";
    if (!isset($_REQUEST['state']))
        $add .= " State is not set";
    if ($this->state !== $_REQUEST['state'])
        $add .= " States are not that same";
    self::errorLog('CSRF state token does not match one provided. problem:' . $add);
    return false;
  }
}

return false;

}

ログインスクリプトを再実行すると、次のエラーが表示されます。

CSRF 状態トークンが提供されたものと一致しません。問題: 状態が null です 状態は同じではありません

これを修正する方法を知っている人はいますか?

ありがとう

4

2 に答える 2

0

私の問題は、リクエストを送信したドメインが回答を返すドメインと同じであることを確認することで解決しました。つまり、wwww.website.com は website.com とは異なります。

于 2013-07-19T17:26:01.237 に答える
-1

getCode関数を次のように置き換えます。

protected function getCode() {
  $server_info = array_merge($_GET, $_POST, $_COOKIE);

  if (isset($server_info['code'])) {
  if ($this->state !== null &&
  isset($server_info['state']) &&
  $this->state === $server_info['state']) {

// CSRF state has done its job, so clear it
    $this->state = null;
    $this->clearPersistentData('state');
    return $server_info['code'];
} else {
    self::errorLog('CSRF state token does not match one provided.');
    return false;
  }
}

return false;
}

このコードは、PHP 5.3.0 より前の $_REQUEST の動作と同様に、$_GET、$_POST、および $_COOKIE 配列を単純に組み合わせたものです。それが役に立てば幸い。

于 2013-02-28T19:59:46.473 に答える