我正在运行一台来自heroku的基于nodejs + express的应用程序接口服务器,并使用dropbox-js库。这是我想要做的:
dropbox用户点击特定的api端点,通过节点进程启动process.
永远不会出现随机用户需要这样做的情况。这是一个团队帐户,这是一个内部工具。
让我犯错的是dropbox想要打开一个浏览器窗口,并从我那里获得连接应用程序的许可。问题是,当进程在heroku实例上运行时,我显然不能单击该按钮。
有没有办法让我在node中完全授权访问app?
我觉得我可以使用一个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);
});
});
发布于 2013-05-02 18:47:59
我做了一些测试,但这是可能的。
首先,您需要通过浏览器进行身份验证,并保存Dropbox返回的token和token secret:
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生成一个新的令牌/密钥对并使旧的令牌/密钥对无效,或者应用程序凭证被吊销)。
发布于 2014-11-05 15:36:35
或者,您可以只使用隐式授权并获取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));
https://stackoverflow.com/questions/16323806
复制相似问题