3

我一直在尝试连接到保管箱服务器并使用 api,但我在第一步本身就失败了。当我请求请求令牌时,我在 nodejs 中收到 Bad oauth_signature 错误。

我用来连接api的代码如下。(我使用https://github.com/sintaxis/node-dbox/blob/master/README.md library/sdk for 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\dropbox>node app.js Express server listening on port 3000 in development mode oauth_consumer_key=[my key]&oauth_signature=faawn09ehmfe25i%2526&oauth_ti mestamp=1324643574&oauth_nonce=132464357437334176&oauth_signature_method=PLAINTE XT&oauth_version=1.0 403 { '{"error": " oauth_signature_method \'PLAINTEXT\'"}' 的 oauth_signature 错误:未定义 }

非常感谢您对此的任何帮助。提前致谢

4

3 回答 3

4

这是node-dbox的作者。从 0.2.2 版开始,此问题已得到解决。

抱歉,添麻烦了。

于 2012-01-14T04:01:43.537 回答
2

我采用了使用passport模块及其配套的 passport-dropbox模块来处理与 Dropbox 进行身份验证握手所需的路由的方法。一旦您收到在 Dropbox 回调中传递的令牌和令牌秘密,请将它们存储在会话状态或任何位置。然后,您可以在随后的 Dropbox API 调用中将它们传递给 node-dbox。护照的作者在 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
    });
  });
});
于 2013-03-27T19:36:52.923 回答
0

要解决该问题,您只需应用此处提到的内容:

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

Oauth.js 签名的第 28 行被编码两次。

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

改成下面这样就解决了无法接收到oauth token的问题。

var signature = getSignature(secret)

谢谢

于 2012-01-02T14:44:00.607 回答