Передача файлов в dropbox с узла js без аутентификации OAuth на основе браузера

Я запускаю сервер api на основе nodejs + express от heroku и использую dropbox-js библиотека. Вот что я хотел бы сделать:

  1. пользователь попадает в определенную конечную точку api и запускает процесс.
  2. создайте некоторые текстовые файлы с помощью процесса узла и сохраните их на сервере
  3. перенесите эти файлы в dropbox, которым я владею, используя мои собственные учетные данные (Пользователь и приложение dropbox).

никогда не будет случая, когда случайный пользователь должен это сделать.. это командный аккаунт, а это внутренний инструмент.

часть, которая меня обманывает, заключается в том, что dropbox хочет открыть окно браузера и получить от меня разрешение на подключение к приложению. Проблема в том, что я, очевидно, не могу нажать кнопку, когда процесс выполняется на экземпляре heroku.

есть ли способ для меня, чтобы разрешить доступ к приложению в узел?

Я чувствую, что потенциально могу использовать процесс phantomJS для нажмите на кнопку - но это кажется слишком сложным, и я хотел бы избежать этого, если возможно.

вот мой код аутентификации:

    // Libraries
    var Dropbox         = require('dropbox');

    var DROPBOX_APP_KEY    = "key";
    var DROPBOX_APP_SECRET = "secret";

    var dbClient = new Dropbox.Client({
      key: DROPBOX_APP_KEY, secret: DROPBOX_APP_SECRET, sandbox: false
    });

    dbClient.authDriver(new Dropbox.Drivers.NodeServer(8191));

    dbClient.authenticate(function(error, client) {
      if (error) {
        console.log("Some shit happened trying to authenticate with dropbox");
        console.log(error);
        return;
      }


      client.writeFile("test.txt", "sometext", function (error, stat) {
        if (error) {
          console.log(error);
          return;
        }

        console.log("file saved!");
        console.log(stat);
      });
    });

2 ответов


меня немного тестирования, но это возможно.

во-первых, вам нужно пройти в браузер и сохранить токен и секрет, что возвращаются в Dropbox:

dbClient.authenticate(function(error, client) {
  console.log('connected...');
  console.log('token ', client.oauth.token);       // THE_TOKEN
  console.log('secret', client.oauth.tokenSecret); // THE_TOKEN_SECRET
  ...
});

Если у вас есть токен и секрет, вы можете использовать их в Dropbox.Client конструктора:

var dbClient = new Dropbox.Client({
  key         : DROPBOX_APP_KEY,
  secret      : DROPBOX_APP_SECRET,
  sandbox     : false,
  token       : THE_TOKEN,
  tokenSecret : THE_TOKEN_SECRET
});

после этого вы больше не будете беспокоиться о необходимости аутентификации через браузер (или, по крайней мере, до тех пор, пока кто-то не запустит код снова без токена и секрет, который заставит Dropbox генерировать новую пару токенов/секретов и аннулировать старые, или учетные данные приложений будут отозваны).


или вы можете просто использовать неявный грант и получить токен oauth.

        var client = new Dropbox.Client({
            key: "xxxxx",
            secret: "xxxxx",
            token:"asssdsadadsadasdasdasdasdaddadadadsdsa", //got from implicit grant
            sandbox:false
        });

Не нужно в браузере на всех.Эта строка больше не требуется!

   client.authDriver(new Dropbox.AuthDriver.NodeServer(8191));