ログインフローを修復しようとしているWordpressプラグインでFacebook PHP SDKを動作させるのに非常に苦労しています。私が抱えている問題は、ログインしているユーザーが確実にいるにもかかわらず、getUser()が常に0 を返すことです。基本的に、私のコードは次のように機能します。
オプション ページ (wordpress 内) があり、ロードされると、次のような PHP SDK Facebook クラスのラッパー クラスのインスタンスが作成されます。
$facebook = new FacebookAPI;
このラッパーのコンストラクターは、PHP SDK Facebook クラスのインスタンスを作成して保存すると同時に、いくつかのクラス変数を設定し、プラグイン内に保存されたセッションを管理するための作業を行います。
次に、オプション ページ内に、Facebook オブジェクト、つまり getLoginUrl() によって生成された login_url へのリンクであるボタンがあります。ログイン URL は、ラッパー クラスを使用して次のように呼び出されます。
// Set Login Url $params = array( 'scope' => 'user_photos,user_photo_video_tags', 'redirect_uri' => FB_REDIRECT_URI, 'display' => 'page' ); $loginURL = $facebook->get_login_url($params);
ここでの redirect_uri はワードプレス内のプラグイン オプション ページであり、ページがリロードされると、ログイン プロセスが正常に完了したかどうかを確認するコードがあります。これは、URL に 'code' 変数が含まれているかどうか、つまり $_REQUEST['code'] が設定されているかどうかを確認することによって行われます。(これは、FB がログイン/権限プロセスを正常に完了したときに行うことです。
問題: 「コード」がリクエスト オブジェクトに設定されている場合、facebook sdk クラスで getUser() を呼び出して、ユーザー ID を取得できるはずです。ここで問題が発生します。getUser()は常に0 を返しますが、その理由がわかりません。
ただし、var_dump($_SESSION) を実行すると配列が空になることに気付きました。また、PHP エラー ログには、次の PHP 警告があります。
PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
ただし、menu-header.php の 92 行目は次のようになります。
echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class $aria_attributes>$title</a>";
ここには、ヘッダーを書き込むものは何も表示されません。だから私はこの時点でかなり困惑しています。
ここで何が起こっているのかについて何か考えがある人はいますか? どんな助けでも絶対に素晴らしいでしょう。