FaceBook アプリケーションがあります。
JavaScript で signed_request を取得する方法はありますか?
PHP では次のようになりますが$_REQUEST['signed_request']
、php を使用できません。
FaceBook アプリケーションがあります。
JavaScript で signed_request を取得する方法はありますか?
PHP では次のようになりますが$_REQUEST['signed_request']
、php を使用できません。
署名されたリクエストは、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
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){ ... });
}
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
ハッピーコーディング!!