OAuth 2 erişim belirticileri tarafından korunan ayrı bir API sunucusuna Proxy istekleri için Express kullanıyorum. Bir jetonun süresi dolduğunda, sunucu artık benim yönlendirici ara yazılımımda işleme koyduğum bir 401'i döndürecek ve daha sonra istemci oturumuyla ilişkili erişim belirtecini yenileyecek (express-session
kullanıyorum). İşte Düğüm içinde aynı isteği tekrar arayın
router.js
app.use('/api', require('./routes.js'));
routes.js
var express = require('express'),
router = express.Router(),
routesController = require('./routes.controller.js');
router.route('/*')
.get(routesController.fetch);
routes.controller.js
authControllermodule.exports.refreshToken = function(req, res, next) {
var formData = {
grant_type: 'refresh_token',
refresh_token: req.session.refreshToken,
scope: 'PRODUCTION'
},
headers = {
'Authorization' : 'Basic ' + consts.CLIENT_KEY_SECRET_BASE64_DEV
};
request.post({url:consts.ACCESS_TOKEN_REQUEST_URL_DEV, form:formData, headers: headers, rejectUnauthorized: false}, function(err, response, body){
var responseBody = JSON.parse(body);
if (response.statusCode === 200) {
req.session.accessToken = responseBody.access_token;
req.session.refreshToken = responseBody.refresh_token;
next();
//How to recall the original request made from fetch controller function after this point?
} else {
console.log('SOMETHING ELSE HAPPENED!');
}
});
};
module.exports.fetch = function(req, res, next) {
var options = helpers.buildAPIRequestOptions(req);
request(options, function(err, response, body){
if(response.statusCode === 401) {
authController.refreshToken(req, res, next);
} else {
res.status(response.statusCode).send(body);
}
});
};
belirteci güncelledikten sonra benim getirme denetleyicisi request
modülü kullanarak tetikleme am orijinal API isteği yeniden yapılmasını istiyoruz.
Bunu yapmak için gerçekten uğraştığım için biraz şaşırdım, bunu başarmanın zarif bir yolu var mı?