我试图在我的node.js应用程序中设置Facebook登录流程但由于某种原因,当我使用节点的https.get时,我无法从Facebook API返回访问令牌( )。我可以在使用curl时获取访问令牌,因此我不确定哪个节点的操作方式不同。相关代码:
var express = require("express");
var https = require("https");
var app = express();
app.route("/")
.all(function(req, res, next)
{
res.sendfile("index.html");
});
app.route("/login")
.get(function(req, res, next)
{
res.redirect("https://www.facebook.com/dialog/oauth?" +
"client_id={my_client_id}&" +
"redirect_uri=http://localhost:3000/auth");
});
app.route("/auth")
.get(function(req, res, next)
{
var code = req.query.code;
https.get("https://graph.facebook.com/oauth/access_token?" +
"client_id={my_client_id}" +
"&redirect_uri=http://localhost:3000/auth" +
"&client_secret={my_client_secret}" +
"&code=" + code,
function(token_response)
{
// token_response doesn't contain token...
res.sendfile("logged_in.html");
}
).on("error", function(e) {
console.log("error: " + e.message);
});
});
var server = app.listen("3000", function()
{
console.log("listening on port %d...", server.address().port);
});
token_response
最终成为一个巨大的对象,似乎与访问令牌无关。 Facebook开发人员的文档说我应该回来:access_token={access-token}&expires={seconds-til-expiration}
这正是我使用curl时得到的,而不是节点。
答案 0 :(得分:1)
有点晚了。但你有没有解决过这个问题?
您似乎错误地处理了HTTPS响应。
http://nodejs.org/api/https.html
https.get("https://graph.facebook.com/oauth/access_token?" +
"client_id={my_client_id}" +
"&redirect_uri=http://localhost:3000/auth" +
"&client_secret={my_client_secret}" +
"&code=" + code,
function(res)
{
res.on('data', function(chunk) {
console.log(chunk);
});
}
)