我正在使用来自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 举报,一经查实,本站将立刻删除。