node.js - business - dropbox node js
Transfiera archivos a Dropbox desde el nodo js sin la autenticación de navegador basada en el navegador (2)
Me llevó un poco de prueba, pero es posible.
Primero, debe autenticarse a través del navegador y guardar el token y el secreto del token que devuelve 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
...
});
Una vez que tenga el token y el secreto, puede usarlos en el constructor Dropbox.Client
:
var dbClient = new Dropbox.Client({
key : DROPBOX_APP_KEY,
secret : DROPBOX_APP_SECRET,
sandbox : false,
token : THE_TOKEN,
tokenSecret : THE_TOKEN_SECRET
});
Después de eso, no se molestará en tener que autenticarse a través de un navegador (o al menos no hasta que alguien vuelva a ejecutar el código sin el token y el secreto, lo que hará que Dropbox genere un nuevo par de token / secreto e invalide el antiguo). unos, o las credenciales de las aplicaciones son revocadas).
Estoy ejecutando un servidor de api basado en nodejs + express desde heroku y utilizando la biblioteca dropbox-js . Esto es lo que me gustaría hacer:
- Un usuario golpea un punto final de API específico y comienza el proceso.
- Genere algunos archivos de texto a través de un proceso de nodo y guárdelos en el servidor
- Transfiera estos archivos a un Dropbox que tengo usando mis propias credenciales (usuario y aplicación de Dropbox).
Nunca habrá un caso cuando un usuario aleatorio necesite hacer esto ... es una cuenta de equipo y esta es una herramienta interna.
La parte que me está fallando es que Dropbox quiere abrir una ventana del navegador y obtener mi permiso para conectarme a la aplicación. El problema es que, obviamente, no puedo hacer clic en el botón cuando el proceso se está ejecutando en la instancia de heroku.
¿Hay alguna forma de autorizar el acceso a la aplicación totalmente en el nodo?
Siento que potencialmente podría usar un proceso phantomJS para hacer clic en el botón, pero parece demasiado complicado y me gustaría evitarlo si es posible.
Aquí está mi código de autenticación:
// 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);
});
});
O simplemente puede usar la concesión implícita y obtener el token outh.
var client = new Dropbox.Client({
key: "xxxxx",
secret: "xxxxx",
token:"asssdsadadsadasdasdasdasdaddadadadsdsa", //got from implicit grant
sandbox:false
});
No es necesario acceder al navegador. ¡Esta línea ya no es necesaria!
client.authDriver(new Dropbox.AuthDriver.NodeServer(8191));