node business arg node.js express dropbox-api

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:

  1. Un usuario golpea un punto final de API específico y comienza el proceso.
  2. Genere algunos archivos de texto a través de un proceso de nodo y guárdelos en el servidor
  3. 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));