gpt4 book ai didi

node.js - 如何在 NodeJS/Express 中的页面刷新之间保留 node-dbox token

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:39 25 4
gpt4 key购买 nike

我正在尝试使用 NodeJSnode-dboxExpress 组合一个小应用程序。请求 DropBox 授权时 - it's a 3 step process ,首先需要获取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);

})();

奖励问题:client 是使用 access_token 创建的,因此客户端实例或 access_token 也需要在页面刷新时保持不变,最好的方法是什么?

最佳答案

我设法通过执行以下操作让它工作:

根据 Dropbox Developer 引用,您可以通过在请求中指定回调 url 来提供回调 url,如下所述:

https://www.dropbox.com/developers/blog/20

https://www.dropbox.com/1/oauth/authorize?oauth_token=<request-token>&oauth_callback=<callback-url>

通过将请求 token 存储在 session 中并重定向到回调 url,您可以访问请求 token 并继续使用。几个 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;
});
});
}

关于node.js - 如何在 NodeJS/Express 中的页面刷新之间保留 node-dbox token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com