2012-04-29 38 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