传输文件,从节点JS来收存箱没有基于浏览器OAuth认证(Transfer files to dro

2019-09-01 15:41发布

我运行一个+的NodeJS快递Heroku的基于API的服务器和使用Dropbox的-JS库。 这是我想要做什么:

  1. 用户点击一个特定的API端点,并揭开序幕的过程。
  2. 通过节点工艺生成一些文本文件并将其保存到服务器上
  3. 这些文件传送到我自己用自己的凭据(用户收存箱和应用程序)保管箱。

当随机用户需要做..这是一个团队的帐户,这是一个内部工具永远不会有一个情况。

被绊倒了我的部分是,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);
      });
    });

Answer 1:

我花了一点的测试,但它是可能的。

首先,你需要通过浏览器进行身份验证和保存由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的产生一个新的令牌/隐匿对和废止旧的,或者凭据被撤销的应用程序)。



Answer 2:

或者你可以只使用隐式授予,并得到OAuth令牌。

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

没有必要去在all.This线浏览器不再需要!

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


文章来源: Transfer files to dropbox from node js without browser based oauth authentication