3

Dropbox サーバーに接続して API を使用しようとしていますが、最初のステップ自体で失敗しています。リクエスト トークンをリクエストすると、nodejs で Bad oauth_signature エラーが発生します。

APIへの接続に使用しているコードは次のとおりです(https://github.com/sintaxi/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 サーバーがポート 3000 でリッスンしている (開発モード) oauth_signature_method \'PLAINTEXT\'"}' の不正な oauth_signature: undefined }

これに関するヘルプは大歓迎です。前もって感謝します

4

3 に答える 3

4

node-dbox の作者です。この問題は、バージョン 0.2.2 で解決されています。

ご迷惑おかけして申し訳ありません。

于 2012-01-14T04:01:43.537 に答える
2

私は、 Dropbox との認証ハンドシェイクに必要なルートを処理するために、 passportモジュールをそのコンパニオンのパスポート ドロップボックスモジュールと共に使用するというアプローチを取りました。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/sintaxi/node-dbox/issues/3

Oauth.js 署名の 28 行目で 2 回エンコードされています。

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

次のように変更すると、oauth トークンを受信できない問題が解決されます。

var signature = getSignature(secret)

どうも

于 2012-01-02T14:44:00.607 に答える