【问题标题】:Facebook access_token failure from node.js来自 node.js 的 Facebook access_token 失败
【发布时间】:2012-04-29 08:19:59
【问题描述】:

我在尝试从 node.js 服务器获取 facebook access_token 时遇到此错误:

{"error":{"message":"(#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的错误。我的网络连接(通过移动调制解调器连接的互联网)也立即中断!在谷歌搜索这个问题时,我发现了很多类似的问题,但找不到完美的解决方案......

【问题讨论】:

  • 代码的更新版本使用了错误的 Graph API 主机名。它是 graph.facebook.com 而不是 grah...

标签: facebook node.js facebook-graph-api


【解决方案1】:

HTTP documentationpath 列为选项,但声明:

optionsurl.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:路径名和搜索的连接。

【讨论】:

    【解决方案2】:

    问题在于 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);
            });
    });         
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2021-12-17
      • 2019-04-29
      • 2011-10-16
      • 2011-02-11
      相关资源
      最近更新 更多