0

iframe アプリ内でいくつかのアクセス許可を要求しているときに、ユーザーを Facebook に認証 (ログイン) しようとしています。

PHP SDK と組み合わせて JS SDK を使用しています。したがって、最初にユーザーがログインしているかどうかを確認し、すべてが PHP を使用して問題ないことを確認$facebook->getUser()します。失敗した場合は、この JS が実行されているページにユーザーをリダイレクトします。

FB.getLoginStatus(function(response) {
    if (response.status === "connected") {
        // Ok, go home
    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                // Ok, go home
            } else {
                // Cancelled, go home
            }
        }, {scope: '<?php echo implode(',', $this->permissions); ?>'});
    }
});

これにより、権限を求めるログイン ダイアログが作成されます。ご覧のとおり、ユーザーが適切に認証/承認された場合と、ダイアログがキャンセルされた場合があります。いずれの場合でも、アプリケーションのルートにリダイレクトするという 1 つのことを行う必要があります。

そのため、ダイアログが表示され、ユーザーがログインすると、リダイレクトされてホームに戻ります。ここで、PHP を使用してgetUser().

ここでの問題は、ユーザーが初めてログインしてリダイレクトされるときgetUser()は常に空であり、ユーザー セッションがないことです。アプリの iframe を保持している facebook ページを更新すると、セッションがあり、権限が適切に設定され、ダイアログがその仕事を完了したことを示します。

最初のリダイレクトが機能しない理由について何か考えはありますか?

同様の問題を見つけましたが、具体的な実用的な解決策はありません。

4

1 に答える 1

0

他の誰かが同じ問題を抱えている場合、私が学んだことは次のとおりです。

  1. Facebook はセッション cookie を JS で設定した後に PHP に提供すると主張していますが、これは正しくありません。少なくとも常にではありません。
  2. これに対する唯一の解決策 (少なくとも私が考えることができる唯一の解決策) は、JS でバックエンド (PHP) にログインするたびにアクセス トークンを手動で渡すことです。そこのセッションに保存し、利用可能なときはいつでも、Facebook API が使用しようとしているアクセス トークンの代わりにそれを使用します。電話するだけ$api->setAccessToken($yourNewToken);
  3. テストを続けて、トークンがいつ利用可能になるかを確認できますが、私にとっては、通常、2 回目の API 呼び出しの直後に利用可能になります。
于 2013-06-18T10:15:51.993 に答える