如何在NodeJS中正确签署对Twitter的REST API v1.1的HTTP请求?

时间:2014-02-09 01:53:15

标签: javascript node.js twitter oauth parse-platform

当我在defined in my cloud/twitter.js file内拨打twitter.request()Parse Cloud Code)时,我只收到错误32“无法验证您”。我已经完成了Twitter告诉我在"Creating a Signature""Authorizing a request" dev.twitter.com处所做的一切,但我似乎无法找到如何做到这一点。

是否有其他人有使用Parse Cloud Code访问Twitter REST API v1.1的经验?

PS 您可以假设我在Parse.User twitterTokentwitterTokenSecret中拥有用户的“访问令牌”和“令牌机密”,但我有还提供了ACCESS_TOKENTOKEN_SECRET常量,因此您无需重新创建Parse.User来帮助我调试此内容。

1 个答案:

答案 0 :(得分:1)

事实证明这是一个简单的解决方法(谢天谢地)。问题在于&落后于我的签名(facepalm)。这是我必须改变的功能。

function getAuthSignature (user, request, oauth) {
  var signingKey, body, signatureBase;

  signingKey =
    ENCODING_METHOD(CONSUMER_SECRET) + '&' + ENCODING_METHOD(TOKEN_SECRET);

  body = 
    mapObject(oauth, ampersandEncoding)
    .concat(mapObject(request.params, ampersandEncoding))
    .sort();

  // Remove trailing ampersand. (aka the fix)
  body.push(body.pop().replace('&', ''));

  signatureBase =
    request.method.toUpperCase() + '&' +
    ENCODING_METHOD(request.url) + '&' +
    ENCODING_METHOD(body.join(''));

  return crypto.createHmac('sha1', signingKey)
               .update(signatureBase)
               .digest('base64');
};