ホームページ  >  記事  >  バックエンド開発  >  Facebook の PHP SDK `getUser()` が常に 0 を返すのはなぜですか?

Facebook の PHP SDK `getUser()` が常に 0 を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-22 07:53:09601ブラウズ

Why Does Facebook's PHP SDK `getUser()` Always Return 0?

Facebook PHP SDK getUser() が常に 0 を返すのはなぜですか?

Facebook と対話する Web アプリケーションの開発では、getUser() が常に 0 を返すという問題がよく発生します。遭遇した。これにより、必要なユーザー情報へのアクセスが妨げられ、認証エラーが発生する可能性があります。

この動作の潜在的な理由の 1 つは、PHP SDK の $_REQUEST 変数への依存であり、他のリクエスト変数 ($ _GET、$_POST、$_COOKIE) を環境内で実行します。 PHP のバージョンも影響する可能性があります。

base_facebook.php ファイル内の 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 {
            self::errorLog('CSRF state token does not match one provided.');
            return false;
        }
    }

    return false;
}

この問題に対処するには、これを変更できます。

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

この変更により、すべてのリクエスト変数が $server_info 変数に統合され、 getCode() 関数は、PHP 環境の構成に関係なく、これらのソースのいずれかからコード パラメーターにアクセスできます。

以上がFacebook の PHP SDK `getUser()` が常に 0 を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。