Twitter API,"无法验证您的凭据。"

时间:2016-06-14 15:31:41

标签: node.js twitter twitter-oauth

正如它在锡上所说的那样。

无论如何,这段代码应该正常工作。它完全遵循https://dev.twitter.com/oauth/application-only页面所说的内容。然而,它不断返回{{"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]} [Finished in 0.551s],我不明白为什么。

var request = require('request');

var options = {
  url: 'https://api.twitter.com/oauth2/token',
  method: 'POST',
  headers: {
    "Authorization": "Basic " + new Buffer("[key]:[secretkey]").toString('base64'),
    "Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
  },
  body: "grant_type=client_credentials"
};

request.post(options, function(error, response, body){
  console.log(body);
});

作为一个快速说明,此代码中省略了密钥和密钥,因为它存在固有的敏感性。您可以将自己的密钥/密钥放在那里进行尝试,但我不愿意提供自己的密钥/密钥。

谢谢!

编辑:

最初的问题是contentType应该是Content-Type,并且在技术上修复了它,但实际上它只是改变了我得到的错误。

更新:

将缓冲区密钥转码为base64并返回显示授权密钥的完整性在整个编码过程中保持不变,并且Basic [base64keyhash]根据Twitter提供的文档有效。

1 个答案:

答案 0 :(得分:0)

由于您已经指定了方法:" POST"在选项中,尝试使用request()而不是request.post():

var request = require('request');

var options = {
  url: 'https://api.twitter.com/oauth2/token',
  method: 'POST',
  headers: {
    "Authorization": "Basic " + new Buffer("[key]:[secretkey]").toString('base64'),
    "contentType":"application/x-www-form-urlencoded;charset=UTF-8"
  },
  body: "grant_type=client_credentials"
};

request(options, function(error, response, body){
  if(error) {
    console.log(error);
  } else {
    console.log(response.statusCode, body);
  }
});