将文件从 Node js 传输到 dropbox,无需基于浏览器的 oauth 身份验证

2024-03-18

我正在运行一个来自heroku的基于nodejs +express的api服务器并使用dropbox-js https://github.com/dropbox/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);
      });
    });

我做了一些测试,但这是可能的。

首先,您需要通过浏览器进行身份验证并保存 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 生成新的令牌/秘密对并使旧的无效) ,或者应用程序凭据被撤销)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件从 Node js 传输到 dropbox,无需基于浏览器的 oauth 身份验证 的相关文章

随机推荐