2013-06-19 4 views
0

Я пишу веб-приложение, которое извлекает содержимое из различных сетей, таких как Twitter, Tumblr, и т.д. Посмотрите на следующий код:модуль Node.js запрос с Tumblr OAuth: 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 и попробовать их с tumblr_access_token функции, я получаю

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

в теле ответа.
Я использую тот же самый код для twitter, и это работает отлично. Мне интересно, не делаю ли я что-то неправильно с кодом, или если tumblr oauth работает несколько иначе, и он принимает параметры по-другому. Из того, что я мог узнать, twitter и tumblr используют один и тот же алгоритм подписи HMAC-SHA1.

ответ

0

В результате я решил использовать модуль паспорта и паспорта tumblr npm для решения этой проблемы. Я думаю, tumblr может использовать несколько иной подход к oauth, поэтому тот же код может не работать.

Смежные вопросы