我正在开发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”,但我手动更换了字符和数据字符串无济于事。有什么我做错了吗?令牌是正确的,我似乎无法正确格式化数据。
修改
终于搞定了。迈克尔斯解决方案是对的。我之前尝试过相同的解决方案并且它没有用,因为我执行了http.request()而不是https.request(),我忘了再试一次。这样一个愚蠢的错误。谢谢!
答案 0 :(得分:1)
GET
个参数作为查询字符串传递,是路径/path?param1=val1¶m2=val2
的一部分。在你的情况下
path: '/debug_token?'+data,
而不是req.write(data)
。