0

私は iOS ゲームのバックエンドに取り組んでおり、クライアントにデータを送信する前にサーバーで Facebook ログインを検証したいと考えています。Facebook から提供された有効な app_access トークンがあり、ブラウザーに次のリンクを正常に入力して、アクセス トークンをデバッグ/検証できます。

https://graph.facebook.com/debug_token?input_token=users_access_token&access_token=apps_access_token

もちろん、正しいアクセス トークンはプレースホルダーに配置されます。その要求から、次のような応答を受け取ります。

{
   "data": {
      "app_id": app_id,
      "is_valid": true,
      "application": "My App",
      "user_id": user_id,
      "expires_at": 1382468400,
      "scopes": [
         "email",
         "publish_actions",
         "user_birthday",
         "user_location"
      ]
   }
}

そこから、ユーザーが正しいアクセス トークンを持っているかどうかを判断できます。ただし、これをサーバー側から実装しようとしても無駄でした。これが私が今試している方法です

var http = require('http'); 
var https = require('https');
var querystring = require('querystring');

var data = querystring.stringify({
    'access_token': app_access_token,
    'input_token': user_access_token
});

console.log('' + data); //Debug to see if data is correctly formatted

var options = {
    host: 'graph.facebook.com',
    port: 443,
    path: '/debug_token',
    method: 'GET',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(data)
    }
};

var req = https.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});

req.write(data);
req.end();

常に次の応答が返されます。

body: {"error":{"message":"(#100) You must provide an app access token or a user access token that is an owner or developer of the app","type":"OAuthException","code":100}}

クエリ文字列が「|」をフォーマットする傾向があることに気付きました 「%7C」に変更しましたが、文字とデータ文字列を手動で置き換えましたが、役に立ちませんでした。私が間違っていることはありますか?トークンは正しいですが、データを正しくフォーマットできないようです。

編集

最後にそれが機能しました。マイケルの解決策は正しいです。以前に同じソリューションを試しましたが、 https.request() の代わりに http.request() を実行し、再試行するのを忘れていたため、うまくいきませんでした。そのようなばかげた間違い。ありがとう!

4

1 に答える 1

1

withGETパラメータは、 path の一部であるクエリ文字列として渡されます/path?param1=val1&param2=val2。あなたの場合

path: '/debug_token?'+data,

の代わりにreq.write(data)

于 2013-10-22T18:50:39.713 に答える