2011-12-23 2 views
3

Я пытался подключиться к серверу Dropbox и использовать api, но я не могу выполнить первый шаг. Когда я запрашиваю токен запроса, я получаю ошибку Bad oauth_signature в nodejs.dropbox api usage в nodejs «Bad oauth_signature для oauth_signature_method»

код, который я использую для подключения к API выглядит следующим образом. (Я использую https://github.com/sintaxi/node-dbox/blob/master/README.md библиотеки/SDK для nodejs)

/* 
* dropbox handlers controller. 
*/ 

var dbox = require('dbox') 
    ,querystring = require("querystring") 

var client = dbox.createClient({ 
    app_key : 'my-key',    // required 
    app_secret : 'my-secret',   // required 
    root  : 'sandbox'   // optional (defaults to sandbox) 
    }) 

exports.index = function(req, res){ 

    client.request_token(function(status, reply){ 
    console.log(status) 
    console.log(reply) 
    // { 
    // oauth_token  : "h89r0sdfdsfwiko", // required 
    // oauth_token_secret : "8hielfflk7100mv", // required 
    // } 
    }) 

результат я получаю в моей консоли выглядит следующим образом

C: \ TMP \ раздаточная > узел app.js сервер Экспресс прослушивает порт 3000 в режиме разработки oauth_consumer_key = [мой ключ] & oauth_signature = faawn09ehmfe25i% 2526 & oauth_ti mestamp = 1324643574 & oauth_nonce = 132464357437334176 & oauth_signature_method = PLAINTE XT & oauth_version = 1,0 {{ "Ошибка": "Bad oauth_signature для oauth_signature_method \ 'PLAINTEXT \'"} ': и ndefined}

Любая помощь по этому вопросу очень ценится. Заранее спасибо

+0

увидеть, если это помогает U http://community.freshbooks.com/forums/viewtopic.php?id=6618 –

+0

Я ценю ур помощь. Но я опубликовал это, попробовав разные способы и много просмотрев. Ссылка, отправленная вами, не помогает мне :( – jayaraju

+0

Спасибо каждому. Проблема решена. Если у кого-то есть аналогичная проблема, используйте ту же библиотеку, о которой я упоминал в первом сообщении, но в файле ../dbox/lib/oauth.js найдите следующие параметры линии ["oauth_signature_method"] = "PLAINTEXT" и измените его на опции ["oauth_signature_method"] = "HMAC-SHA1", – jayaraju

ответ

0

Чтобы решить эту проблему нужно просто применить то, что упоминается здесь:

https://github.com/sintaxi/node-dbox/issues/3

В строке 28 Oauth.js подписи который кодируется дважды.

var getSignature = function(tokenSecret){ 
    return encode(consumerSecret) + "&" + encode(tokenSecret) 
} 
var signature = encode(getSignature(secret)) 

Изменение его на следующее решение проблемы неспособности получить токен oauth.

var signature = getSignature(secret) 

Thx

4

Это является автором узла-dbox. Эта проблема была решена с версии 0.2.2.

Извините за беспокойство.

+0

извините за поздний комментарий. Проблема давно решена – jayaraju

2

Я принял подход к использованию модуля passport вместе со своим компаньоном passport-dropbox для обработки маршрутов, необходимых для подтверждения аутентификации с помощью Dropbox. Как только вы получите секрет маркера и токена, переданный в обратном вызове Dropbox, сохраните их в состоянии сеанса или где угодно. Затем вы можете передать их в node-dbox в последующих вызовах Dropbox API. Автор паспорта имеет хороший пример на GitHub здесь: https://github.com/jaredhanson/passport-dropbox/tree/master/examples/login

passport.use(new DropboxStrategy({ 
    consumerKey: DROPBOX_APP_KEY, 
    consumerSecret: DROPBOX_APP_SECRET, 
    callbackURL: APP_URL + '/auth/dropbox/callback' 
}, 
function(token, tokenSecret, profile, done) { 
    var user = { 
    provider: 'dropbox', 
    displayName: profile.displayName, 
    email: profile.emails[0].value, 
    // I'm choosing to store the token and tokenSecret on the user. 
    // The keys must be as shown below to be compatible with node-dbox 
    dboxToken: {'oauth_token': token, 'oauth_token_secret': tokenSecret} 
    }; 

    return done(null, user); 
})); 


app.get('/files', function(req, res) { 
    var dboxClient = dboxApp.client(req.user.dboxToken); 

    dboxClient.metadata('/', {}, function(status, reply) { 
    res.render('files', { 
     pathMetaData: reply, 
     user: req.user 
    }); 
    }); 
});