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 サイトの他の関連記事を参照してください。