この問題について説明しましょう。少し長くなりますが、よろしくお願いします。
背景:
ウィキペディアで使用されている Mediawiki というフレームワークがあります。また、Facebook login という名前のサードパーティの拡張機能があり、Facebook アカウント経由で Mediawiki Web サイトにログインできると主張しています。
問題:
どちらも PHP で書かれています。私の Mediawiki ウェブサイト環境は
+---------------+-----------+
| Product | Version |
+---------------+-----------+
| MediaWiki | 1.20.6 |
| PHP | 5.4.9 |
| MySQL | 5.5.31 |
+---------------+-----------+
Facebook ログイン拡張機能については、github github.com/garbear/facebook-mediawiki から最新バージョンを取得します。
Chrome では動作しませんが、Firefox では問題なく動作します。
私のデバッグストーリー:
まず、公式の Github リポジトリにExternalUser.phpという名前のファイルがありません。[path_to_mediawiki]/include からコピーして、この拡張機能に配置します。
http://d.pr/f/F0MCこのリンクは私の作業バージョンです。Firefox では主張どおりにしか機能しませんが、Chrome では機能しません
facebook->getUser() return 0 を要求する理由:
エラーログを印刷して変数の値を確認することで、拡張機能全体を追跡しました。
Chrome と Firefox の唯一の違いは次のとおりです。
Google Chrome でテストしたところ、ポップアップ ウィンドウに Facebook のユーザー名とパスワードを入力した後、[ログイン] ボタンをクリックしました。Facebook Web サイトを更新すると、既に「ログイン済み」ステータスが表示されていました。しかし、私の mediawiki Web サイトでは、ログイン ページでページが自動的に更新され続け、「ログイン済み」の状態とページにリダイレクトできません。
なので、Chrome のセッション / Cookie の設定に問題があるのではないかと思います。Chrome の設定を確認しましたが、すべてがデフォルトです。Chome をアンインストールして再インストールしましたが、まだ同じ問題が発生しています。
私の次のステップは、この拡張機能をデバッグすることです (する必要があります)。この拡張機能のデバッグに丸 2 日間費やした後、この問題に関連する正確なコードを見つけたと思います。
FacebookInit.phpの46 行目
$facebook = new FacebookAPI();
デバッグするには、次のように変更しましょう
$facebook = new FacebookAPI();
error_log("==log===> ".$facebook->getUser(),0);
追加のステートメントは、変数$facebook->getUser()
を apache error.logに書き込みます。
これを Firefox で試してみると、Mark Zuckerberg の場合は 4、その他の場合は 12345678 などの正の整数が返されます。しかし、Chrome でこれを試すと、常に 0 が返されます。
Stack OverFlow でほとんどのソリューションを試しました:
- Facebook PHP SDK は Firefox では動作しますが、Chrome では動作しません 未解決で、OP は PHP の代わりに JavaScript を使用しました
- getUser() は 0 を返します 。Facebook PHP SDK の新しいバージョンをダウンロードすることをお勧めします。やったのですが、これで Chrome の問題は解決しませんでした。
- Facebook API : getUser() は常に 0 を返すこれは、Facebook.php を含めるように指示します。もちろん、元のコードにはすでに含まれています。
- Facebook アプリケーションが IE で正しく実行されないリクエスト HEAD を設定します。これで IE の問題は解決するかもしれませんが、Chrome の問題は解決しません。
- Facebook Connect - ログイン ポップアップが無限ループでハングした後変数Cookieを true に設定します。うまくいきません。
誰かが私がさらに何を試すことができるか考えているなら、私は入力に感謝します.