2012-04-29 71 views
3

失敗我嘗試獲取Facebook的的access_token的node.js服務器得到這個錯誤:的Facebook從的access_token node.js的

{ 「錯誤」:{ 「消息」:「(#803 )一些你的要求不存在 別名:的access_token」, 「類型」: 「OAuthException」, 「代碼」:803}}

以下是獲得ACCESS_TOKEN代碼:

var options={ 
     host:'graph.facebook.com',  
     path:'oauth/access_token?client_id=MYAPPID&redirect_uri=http://127.0.0.1:8000/&client_secret=MYAPPSECRET&code=CODEOBTAINEDFROMFB' 
} 
http.get(options,function(res){ 
    res.on('data', function (chunk) { 
     console.log('BODY: ' + chunk); 
    }); 
}); 

從我的瀏覽器請求相同的網址工作正常,我也得到access_token。這裏有什麼概率?

更新 這可能是我從node.js中經歷過的最有趣的事情。我已經更新上面的代碼爲:

var http=require('http') 
var options={ 
     host:'grah.facebook.com',  
     pathname:'/oauth/access_token', 
     search:'client_id=MYAPPID&redirect_uri=http://127.0.0.1:8000/&client_secret=MYAPPSECRET&code=CODEOBTAINEDFROMFB' 
} 

http.request(options,function(res){ 
     console.log('http fb code') 
     res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
     console.log('BODY: '+chunk); 
    });  
}); 

什麼情況是服務器拋出所謂的錯誤插座掛斷。此外,我的網絡連接(通過移動調制解調器連接互聯網)立即爆發!雖然谷歌搜索這個問題,我發現了很多與此類似,但無法找到完美的解決方案......

+0

代碼的更新版本使用Graph API的錯誤主機名。它是**圖**。facebook.com不** ** grah ** ... – 2012-05-01 07:12:20

回答

0

問題在於http對象。 Facebook只允許https,同時請求client_secret。 所以這可以像我期望的那樣工作:

var options={ 
     host:'graph.facebook.com',  
     path:'/oauth/access_token?client_id=APPID&redirect_uri=http://127.0.0.1:8000/&client_secret=CLIENTSECRET&code=FBUSERCODE' 
}  
var https=require('https'); 
https.get(options,function(res){ 
     console.log('http fb code') 
     res.setEncoding('utf8');  
     res.on('data', function (chunk) { 
       console.log('BODY: '+chunk); 
     }); 
});   
2

HTTP documentation名單path作爲選項,但指出:

options與對齊url.parse()

在創建URL時,您應該使用pathname(和search作爲查詢字符串),而不是path。另請參閱URL in documentation for node.js

var options={ 
    host:'graph.facebook.com',  
    pathname:'oauth/access_token', 
    search: 'client_id=MYAPPID&redirect_uri=http://127.0.0.1:8000/&client_secret=MYAPPSECRET&code=CODEOBTAINEDFROMFB' 
} 
http.get(options,function(res){ 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk); 
    }); 
}); 

更新:
url.format()文檔URL對象的描述並沒有列出path作爲選項,這樣它可能只有url.parse()

節點文檔的URL狀態恢復:

path:連接路徑名和搜索。

+0

雖然使用'路徑名'迴應'ondata'事件沒有調用... – Vivek 2012-05-01 10:49:46