微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 将文件从节点js传输到保管箱,而无需基于浏览器的oauth身份验证

我正在使用来自heroku的nodejs express基于api服务器,并使用 dropbox-js库。这是我要做的:

>一个用户点击一个特定的api端点并启动该进程。
>通过节点进程生成一些文本文件并将其保存在服务器上
>将这些文件传输到我拥有的使用我自己的凭据(用户和保管箱应用程序)的保管箱。

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

绊倒我的部分是,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生成新的令牌/秘密对,并使旧的或应用程序凭据被撤销)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐