2013-06-19 46 views
0

我寫一個Web應用程序,從各種網絡如Twitter,tumblr等看一看下面的代碼獲取內容:與tumblr的OAuth Node.js的請求模塊:OAuth的簽名不匹配

User.prototype.tumblr_authenticate_url = function(callback) { 
var oauth = { 
    consumer_key: config.tumblr.tumblr_consumer_key, 
    consumer_secret: config.tumblr.tumblr_consumer_secret 
}; 
request.post({url:'http://www.tumblr.com/oauth/request_token', oauth:oauth}, function (e, r, body) {    
    if(e) 
     return callback(e); 
    var access_token = qs.parse(body); 

    if(!access_token || typeof(access_token.oauth_token) == 'undefined' || typeof(access_token.oauth_token_secret) == 'undefined') 
     return callback(1); 
    return callback(null,{ 
     url : 'http://www.tumblr.com/oauth/authorize?oauth_token=' + access_token.oauth_token, 
     oauth_token : access_token.oauth_token, 
     oauth_token_secret : access_token.oauth_token_secret}); 
}); 
}; 

User.prototype.tumblr_access_token = function(token,verifier,callback) { 
var _oauth = { 
    consumer_key: config.tumblr.tumblr_consumer_key, 
    consumer_secret: config.tumblr.tumblr_consumer_secret 
}; 
_oauth.token = token; 
_oauth.verifier = verifier; 
request.post({url:'http://www.tumblr.com/oauth/access_token', oauth:_oauth}, function (e, r, body) { 
    if(e) 
     return callback(e); 
    var user_details = qs.parse(body); 
    console.log(body); 
    if(!user_details || typeof(user_details.oauth_token)=='undefined' || typeof(user_details.oauth_token_secret)=='undefined') 
     return callback(1); 

    return callback(null,{ 
     oauth_token : user_details.oauth_token, 
     oauth_token_secret : user_details.oauth_token_secret}); 
}); 
}; 

現在,tumblr_authenticate url部分完美地工作。它成功獲取請求令牌,並且我得到一個正確的認證頁面。然而,當我從重定向的URL複製參數,並嘗試將其與tu​​mblr_access_token功能,我得到

oauth_signature [xxxx] does not match expected value [yyy] 

在響應主體。
我使用完全相同的代碼爲推特,這完美的作品。我想知道如果我在代碼中做了什麼錯誤,或者tumblr oauth的工作方式稍有不同,並且它以不同的方式接受參數。從我可以發現的,twitter和tumblr使用相同的簽名算法HMAC-SHA1。

回答

0

我結束了使用護照和passport-tumblr npm模塊來解決這個問題。我認爲tumblr可能會對oauth使用稍微不同的方法,因此相同的代碼可能無法正常工作。