6

FaceBook アプリケーションがあります。

JavaScript で signed_request を取得する方法はありますか?

PHP では次のようになりますが$_REQUEST['signed_request']、php を使用できません。

4

3 に答える 3

2

Facebookのドキュメントから:

署名されたリクエストは、HTTP POSTを介して、アプリ ダッシュボードでキャンバス URLとして設定された URL に送信されます 。

[著者による強調]

JavaScript を介してその POST データに直接アクセスすることはできません。

POSTデータは、サーバーによって受信されることになっています。結論として、ブラウザはそのデータへのアクセスを許可せず、サーバーはクライアント コードでデータをレンダリングします。関連する質問: JavaScript を使用して POST 要求パラメーターを読み取る方法

ではなぜそうなのか?理由はセキュリティだと思います。POST リクエストでパスワードをサーバーに送信し、アプリで使用する悪意のある JavaScript プラグインを使用して、そのデータを読み取って独自の悪意のあるサーバーに送信しようとしていると想像してください。それはまったくいいことではありません。

あなたの場合、 を含む POST データは、アプリのダッシュボードで指定したキャンバス URLまたは登録プラグインを使用して指定したリダイレクト URLsigned_requestを介してアプリのページを要求する Facebook による HTTP POST を介してアプリに送信されます。からアクセスできます。前提条件は次のとおりです: キャンバス アプリを使用している (Facebook の「内部」にいて、ページ タブまたはキャンバス アプリを使用している)か、登録プラグインを使用していること。指定した URL でステータスを取得してください。関連する質問: iframe に投稿するにはどうすればよいですか? タブページにない場合、 getSignedRequest は null です。FB.getLoginStatus

FB.getLoginStatusまた、2 番目のパラメーターを に設定して、Facebook へのラウンドトリップを強制するように呼び出してみてくださいtrue。応答オブジェクトのキャッシュを効果的に更新し、ユーザーが最後の完全なセッション ルックアップ以降に Facebook にログイン (またはログアウト) したり、アプリケーションを削除したりした場合の問題を解決します。アカウント設定:

FB.getLoginStatus(function(response) {
  // this will be called when the roundtrip to Facebook has completed
}, true);

この質問もチェックしてください - それが役立つかもしれません: Facebook iframe tab signed request always empty

于 2013-12-16T20:55:38.057 に答える
2

FB JavaScript SDK から、FB.getLoginStatus を使用して signed_request を取得できます。

これは、ユーザーがアプリ/ウェブサイトにログインしている場合です。

そうでない場合は、FB.login メソッドを呼び出すことができます。

参照: http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

あなたのコメントに続いて:

やあ、

応答をコンソールに記録してみる必要があると思います。

ユーザーがログインしている場合、response.status は 'connected' になります。この応答パラメーターで値が返されるため、常に true が返されます。

ログは次のようになります

{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
    }
}

何が返されているかをテストするには、これを試してください:

if(response.status == 'connected'){
   // user is logged and signed_request is accessible
   // with response.authResponse.signedRequest
}else{
   // user not logged in, request them to login
      FB.login(function(response){ ... });
}
于 2011-11-28T20:40:50.390 に答える
0

Facebook から JavaScript を使用して署名付きリクエストを取得することは、$_REQUEST['signed_request'] の値とは異なります

できることは、$_REQUEST['signed_request'] を JavaScript 変数に格納し、それを ajax 経由で php に渡すことです。

例えば

var signedRequest = <?php echo $_REQUEST['signed_request']  ?>

//その後、jsonp リクエストを発行します。

必要に応じて、私のサービスを使用できます。

使用方法: これに jsonp リクエストを送信するだけです

https://websta.me/fbappservice/parseSignedRequest/<append signed request here>

成功すると、このようなものが返されます

{
"algorithm": "HMAC-SHA256",
"issued_at": xxxxx,
"page": {
    "id": "xxxxxxx",
    "admin": true,
    "liked": false
},
"user": {
    "country": "jp",
    "locale": "en_US",
    "age": {
        "min": xx
    }
}

失敗した場合、次のように出力されます。

Bad signed Json Signature

ハッピーコーディング!!

于 2014-08-08T07:21:32.653 に答える