1

質問は最初は少し鈍く聞こえるかもしれませんが、私は困惑しています。私はFacebook APIに大きく依存するPHPアプリケーションを開発しているため、PHP SDKを使用して接続し、現在ログインしているユーザーを経由して取得しています。

$fb->getUser();

Javascript SDKも含めましたが、現在はログインしているユーザーのみをフェッチし、そのデータオブジェクトをコンソールに出力します。

今日、私はアプリのローカル開発バージョンを実装し始め、Facebookで2番目の開発アプリをセットアップし、それらを接続して出来上がりました。それは機能しません。getUser()は、ローカルでは常に0を返します。私が今知ったのは、Firefoxで動作するということです。getUser()値をvar_dumpし、Firefoxでは完全なユーザーID(mine)を受け取りますが、Chromeでは0を受け取ります(はい、両方のブラウザーでFacebookにログインしています)。

キャッシュとCookieをクリアし、セッションを破棄しました。ブラウザがFacebookへのPHPリクエストにどのような違いをもたらすか想像できません。誰かがこのようなことを経験したことがありますか?明らかに、app_keyとsecretはFirefoxで動作するため、正しくなければなりません。


編集:参考までに、アプリケーションのライブバージョン(ホストされている)はChromeでうまく機能します。私が動作できないのは、この非常にローカルなアプリだけです。


編集#2:これは私がアプリで実行するJavascriptです

  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : {$_connect.app_id}, // App ID
        channelUrl : '{$_connect.channel_file}', // Channel File
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true  // parse XFBML
      });
    {if !$_user.is_authorized}
    // listen for and handle auth.statusChange events
    FB.Event.subscribe('auth.statusChange', function(response) {
      if (response.authResponse) {
        // user has auth'd your app and is logged into Facebook
        FB.api('/me', function(me){
          if (me.name) {
            console.log(me);
            //window.location = 'index.php';
            // redirection is currently causing loop
          }
        })
      } else {}
    });
    {/if}
    };
    // Load the SDK Asynchronously
    (function(d){
       var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement('script'); js.id = id; js.async = true;
       js.src = "//connect.facebook.net/de_DE/all.js";
       ref.parentNode.insertBefore(js, ref);
     }(document));
  </script>
4

2 に答える 2

1

ブラウザがFacebookへのPHPリクエストにどのような違いをもたらすのか想像できませんか?

もちろん、唯一のものはパラメータです。

そして、このシナリオでは、Facebookがログインに成功したときに設定するCookieであり、PHP SDKがログインしたユーザーを認識できるようにするために、ブラウザーが受け入れてサーバーに送り返す必要がある可能性があります。

そのため、アプリをローカルでテストするときに、ChromeがこれらのCookieを受け入れるかどうかを確認してください。

于 2012-09-14T12:10:28.407 に答える
1

また、両方のブラウザで JS SDK を介して認証する必要があると思います。JavaScript リクエストの背後には OAuth ロジックがいくつかあると思います。

ただし、最近の Chrome は、クロスドメイン js リクエストをブロックするか、単に実行しないようにしています。そのようなことが起こった場合は、ネット コンソールを調べてみてください。もしそうなら

  • ローカル環境のドメイン + プロトコル /http(s)/ を確認してみてください。js api を呼び出すときは https を使用する必要があると思います
  • JavaScript SDK ドキュメントで説明されているように、これらのクロスブラウザー呼び出しの問題を解決/防止するチャネル ファイルの使用を検討してください。

上記が役に立たない場合は、アプリを開発し、FFox でテストしてから、展開したら実際の設定でテストすることができると思います。

幸運を。

于 2012-09-14T14:00:55.263 に答える