Передача файлов в dropbox с узла js без аутентификации OAuth на основе браузера
Я запускаю сервер api на основе nodejs + express от heroku и использую dropbox-js библиотека. Вот что я хотел бы сделать:
- пользователь попадает в определенную конечную точку api и запускает процесс.
- создайте некоторые текстовые файлы с помощью процесса узла и сохраните их на сервере
- перенесите эти файлы в 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));