3

node.jsサーバーからfacebook access_tokenを取得しようとしたときに、次のエラーが発生しました。

{"エラー":{"メッセージ":"(#803) 要求したエイリアスの一部が存在しません: access_token","type":"OAuthException","code":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);
    });
});

ブラウザからの同じ URL のリクエストは正常に機能しており、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);
    });     
});

そして、何が起こっているのかというと、サーバーはsocket hang upというエラーをスローします。また、私のネットワーク接続(モバイルモデム経由で接続されたインターネット)はすぐに壊れます!この問題をグーグルで検索しているときに、これによく似たものを見つけましたが、完璧な解決策を見つけることができません...

4

2 に答える 2

2

HTTPドキュメントはオプションとしてリストpathされていますが、次のように述べられています。

optionsと協調するurl.parse()

URLを作成するときではなく、 pathname(およびsearchクエリ文字列に)使用する必要があります。node.jsのドキュメントpathも参照してくださいURL

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オブジェクトの説明では、オプションとしてurl.format()リストされていないpathため、おそらくによってのみ返されますurl.parse()

URLの状態に関するノードのドキュメント:

path:パス名と検索の連結。

于 2012-04-29T08:51:47.543 に答える
0

問題はhttpオブジェクトにあります。Facebookは、 client_secretでリクエストしている間のみhttpsを許可します。だからこれは私が期待したように動作することができます:

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);
        });
});         
于 2012-05-01T10:48:35.093 に答える