javascript - Twitter OAuth Request_Token 与 Javascript,可能是错误的时间?

标签 javascript twitter oauth xmlhttprequest

所以我正在尝试从 Twitter 获取 token ,但失败了。 我收到以下错误:“无法验证 oauth 签名和 token ”。 我读过这可能是由于您的系统时钟错误。 在 javascript 中,我使用以下代码测试了我的日期

var minutes=1000*60;
var hours=minutes*60;
var days=hours*24;
var years=days*365;
var d=new Date();
var t=d.getTime();
var y=t/years;
console.log((y+1970) + " year and " + (t%years)/days)

这给了我 2012 年零 17 天.. 1972年 1976年 1980年 1984年 1988年 1992年 1996年 2000年 2004年 2008年 __=10 个闰日。今天是 8 号,所以除去闰日,我的系统时钟似乎是 7 号?或者我在这里犯了一个错误?如果这是问题,我该如何解决并纠正我的时钟?

在 cmd 中,当我执行 date cmd 时,它会给出今天的日期,即 8 号。

这是我的发布请求和代码,以防问题出在代码而不是时钟中。

我的帖子请求是:

POST http://api.twitter.com/oauth/request_token?oauth_callback=127.0.0.1&oauth_consumer_key=FFZJrBaPLsiwTDg5159tTQ&oauth_nonce=tWHEEIW8vLS6tMggo3IXe6e449qv1GpE8LunKRsbRF&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1326039495&oauth_version=1.0&oauth_signature=d%2BQqgTzJCjYIp9vKwm%2BCWzVLPvA 

得到 401(未经授权)

这是我的 JavaScript 代码。

var url = "http://api.twitter.com/oauth/request_token";

var params={
oauth_callback : "127.0.0.1"
,oauth_consumer_key : "FFZJrBaPLsiwTDg5159tTQ"
,oauth_nonce : OAuth.nonce(42)
,oauth_signature_method : "HMAC-SHA1"
,oauth_timestamp : OAuth.timestamp()
,oauth_version: "1.0"}

//temp is to be the signature base string
var temp = toSignParams("POST",url,params); 
console.log(temp);
//This logs the signature base string as  "POST&http%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3D127.0.0.1%26oauth_consumer_key%3DFFZJrBaPLsiwTDg5159tTQ%26oauth_nonce%3D5gQVIa3WmwD6ARGGQTITl1Ozgxe2t8em5HC7g8wvMi%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1326038871%26oauth_version%3D1.0"
//which is correct I think.
//When I use this with the base signature from twitters oauth example page I get the result they got.
//it hashes the twitter signing key with base signature.
params.oauth_signature = b64_hmac_sha1("MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&",temp);


var req = new XMLHttpRequest();
req.open("POST",toURIParams(url,params),true);  
req.send();

console.log(params)

req.onreadystatechange=function(){
if (req.readyState==4) 
    {
    console.log(req.responseText); //this is saying "Failed to validate oauth signature and token"
    }
}

//function to convert to Signature paramaters, as indicated on twitter page.
function toSignParams(method,base,params){
    tail=[];
    for (var p in params) {
        if (params.hasOwnProperty(p)) {
            tail.push(p + "%3D" + encodeURIComponent(params[p]));
        }
    }
    return method + "&" + encodeURIComponent(base) + "&" + tail.join("%26")
}

//function to convert to uri encoded parameters.
function toURIParams(base, params) {
  tail = [];
  for (var p in params) {
    if (params.hasOwnProperty(p)) {
      tail.push(p + "=" + encodeURIComponent(params[p]));
    }
  }
  return base + "?" + tail.join("&")
}

有什么想法吗?

最佳答案

我使用了一个名为“jsOAuth-1.3.3”的库,该库在 Twitter 兼容 JavaScript 的库列表中找到,但已不存在。

他们现在列出的 2 个 JavaScript 选项是:

  • user-stream by @AivisSilins — 一个简单的 Node.js 用户流客户端 和
  • codebird-js by @mynetx — JScript 中的 Twitter 库。

https://dev.twitter.com/docs/twitter-libraries 上找到的

如果有人遇到无法使用这些解决方案的问题,我可以尝试在线查找或上传我使用的库。

关于javascript - Twitter OAuth Request_Token 与 Javascript,可能是错误的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779317/

相关文章:

authentication - Firebase 自定义 OAuth 身份验证

javascript - Twitter登录弹出窗口被阻止

c - Oauth C 库

oauth - 如何在 WebAPI 中使用 Google Analytics oAuth?

javascript - 在 react/redux 应用程序中单击按钮添加加载程序

node.js - 如何使用 Node js 版本 0.6.18 输出 twitter api 响应

rest - 通过 OAuth 代表商家发出 PayPal REST API 请求

javascript - 使用 RegExp.test 进行 Array.some 的回调

javascript - HTML5 : How to create a "range input type" with dynamic values?

javascript - 为什么我的用于删除焦点文本并在模糊时重新添加文本的 jQuery 插件不起作用?