Node.js 无需基于浏览器的oauth身份验证即可将文件从node js传输到dropbox
我正在从heroku运行一个基于nodejs+express的api服务器并使用该库。以下是我想做的:Node.js 无需基于浏览器的oauth身份验证即可将文件从node js传输到dropbox,node.js,express,dropbox-api,Node.js,Express,Dropbox Api,我正在从heroku运行一个基于nodejs+express的api服务器并使用该库。以下是我想做的: 用户点击特定的api端点并启动流程 通过节点进程生成一些文本文件并将其保存在服务器上 将这些文件传输到我使用自己的凭据(用户和dropbox应用程序)拥有的dropbox 永远不会有随机用户需要这样做的情况。。这是一个团队帐户,这是一个内部工具 让我大吃一惊的是dropbox想打开一个浏览器窗口,并获得我连接应用程序的许可。问题是,当进程在heroku实例上运行时,我显然无法单击该按钮 我有没
// 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返回的令牌和令牌密钥: 一旦您拥有令牌和密码,就可以在
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生成新的令牌/密码对并使旧的令牌/密码对无效,或者应用程序凭据被吊销).或者您可以使用隐式授权并获取oauth令牌
var client = new Dropbox.Client({
key: "xxxxx",
secret: "xxxxx",
token:"asssdsadadsadasdasdasdasdaddadadadsdsa", //got from implicit grant
sandbox:false
});
根本不需要访问浏览器。不再需要此行
client.authDriver(new Dropbox.AuthDriver.NodeServer(8191));
非常感谢您抽出时间来测试它!这正是我想要的。干杯我不确定我做错了什么,但我使用了上面的代码和一个密钥、密钥、令牌密钥和令牌密钥,我知道它们都是有效的,当我尝试上载文件时,除了未经授权的错误之外,我无法获得任何东西。更新:我猜这与dropbox js迁移到oauth2有关,但似乎凭证正在更改;我正在缓存一个令牌,而不是一个令牌和密码,这就是关键所在。我发现这个站点可以很容易地生成一个oauth2令牌,以这种方式使用:这是正确的,但它被称为访问令牌,而不是隐式授权:是的,这是实现该过程的最佳方式。
client.authDriver(new Dropbox.AuthDriver.NodeServer(8191));