2014-05-13 78 views
1

我想在我的node.js應用程序中設置Facebook登錄流,但出於某種原因,我不能從Facebook API返回訪問令牌我使用節點的https.get()。當我使用curl時,我可以獲取訪問令牌,所以我不確定哪個節點的做法不同。相關代碼:Node.js https.get()不返回Facebook訪問令牌

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

因此,公司確實在'token_response'對象包含什麼? – Tobi

+0

@Tobi它看起來好像有很多關於請求的數據似乎一遍又一遍地重複。我試着創建一個循環遍歷所有屬性的函數,找到一個名爲「access_token」的屬性,但它找不到一個 – MattL922

回答

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); 
      }); 
     } 
    ) 
+0

謝謝!我最終搞清楚了,並且確實做了你在這裏的工作。數據事件是固定的 – MattL922