dar*_*uby 6 dropbox node.js express
我试着放在一起使用的小应用程序NodeJS,node-dbox和Express.请求DropBox授权时 - 这是一个3步骤的过程,首先需要获取request_token,然后用户授权他们访问Dropbox页面,然后access_token根据request_token用户已授权请求的事实请求.
但是,当我为第1步和第2步提供页面时(获取request_token并向用户提供url) - request_token实例已经消失!所以在第3步中我无法请求access_token,因为它需要request_token通过
我正在尝试保存request_token在cookie中,但考虑到包含敏感数据,将其发送到客户端可能不是一个好主意.有任何想法吗?
简化代码如下:
(function() {
var dbox = require('dbox'),
config = require('easy-config'),
express = require('express'),
dboxApp = dbox.app(config.dropbox_credentials),
app = express();
app.use(express.cookieParser());
app.get('/', function(req, res) {
dboxApp.requesttoken(function(status, request_token) {
res.cookie('request_token', JSON.stringify(request_token));
res.send("<a href='" + request_token.authorize_url + "' targe='_new'>authorize via dropbox</a><br/>" + "<a href='/next'>next</a>");
});
});
app.get('/next', function(req, res) {
var request_token = JSON.parse(req.cookies.request_token);
if(request_token) {
dboxApp.accesstoken(request_token, function(status, access_token) {
var client = dboxApp.client(access_token);
client.account(function(status, reply){
res.send(reply);
});
});
} else {
res.send('sorry :(');
}
});
app.listen(3000);
})();
Run Code Online (Sandbox Code Playgroud)
奖金问题:client是创建的access_token,所以无论是客户端实例还是access_token需要跨页面刷新维护,最好的方法是什么?
我通过执行以下操作设法使其正常工作:
根据 Dropbox 开发人员参考,您可以通过将回调 URL 与请求一起指定来提供回调 URL,如下所示:
https://www.dropbox.com/developers/blog/20
https://www.dropbox.com/1/oauth/authorize?oauth_token=<request-token>&oauth_callback=<callback-url>
Run Code Online (Sandbox Code Playgroud)
通过将请求令牌存储在会话中并重定向到回调 URL,您就可以访问请求令牌并继续前进。几个 Express 路由处理程序,将成员 id 作为参数传递,以请求然后处理响应,可能如下所示:
linkAccount : function(req, res){
var memberId = req.params.memberId,
appKey = 'MYAPPKEY',
appSecret = 'MYAPPSECRET',
dbox = require('dbox'),
dboxApp = dbox.app({ "app_key": appKey, "app_secret": appSecret });
req.session.dboxStore = {};
req.session.dboxStore.dboxApp = dboxApp;
dboxApp.requesttoken(function(status, request_token){
req.session.dboxStore.request_token = request_token;
console.log("request_token = ", request_token);
res.redirect('https://www.dropbox.com/1/oauth/authorize?oauth_token='+request_token.oauth_token+
'&oauth_callback=http://myhost.local/linksuccess/dropbox/'+memberId);
res.end;
});
},
linkSuccess : function(req, res){
var memberId = req.params.memberId;
var appKey = 'MYAPPKEY';
var appSecret = 'MYAPPSECRET';
var dbox = require('dbox');
var dboxApp = dbox.app({ "app_key": appKey, "app_secret": appSecret });
var request_token = req.session.dboxStore.request_token;
dboxApp.accesstoken(request_token, function(status, access_token){
console.log('access_token = ', access_token);
Member.setAuthToken(memberId, 'dropbox', access_token, function(err, member){
res.render('index', { title:'SUCCESSFUL DROPBOX AUTH' });
res.end;
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |