익스프레스를 3.x에서 4.x로 마이그레이션 중이며 익스프레스 4에는 basicAuth
이 없으므로 이것을 basic-auth
module으로 바꾸려고합니다.익스프레스 "BasicAuth"와 자격 증명 비동기 확인
문제는 내 user_tools.checkCredentials()
방법을 통해 자격 증명을 비동기로 확인하는 것입니다. 자동 CHECKCREDENTIALS에 실패,
var auth = function(req, res, next) {
isFromLAN(req.ip, function(fromLAN) {
if (fromLAN) {
// console.log('LAN --> no auth needed');
next();
} else {
// console.log(req.ip + ' --> WAN --> auth to pass');
basicAuth(function(user, pass, callback) {
user_tools.checkCredentials(user, pass, function(valid) {
callback(null, valid);
});
})(req, res, next);
}
});
};
현재 코드 : 연결 BASICAUTH 미들웨어에서
var express = require('express');
var basicAuth = require('basic-auth');
var user_tools = require('./user-tools');
var app = express();
var auth = function(req, res, next) {
function isFromLAN(ip) {
console.log('isFromLAN()', ip);
if (ip === '127.0.0.1') {
return true;
}
return false;
}
if (isFromLAN(req.ip)) {
// console.log('LAN --> no auth needed');
next();
} else {
console.log(req.ip + ' --> WAN --> auth to pass');
function unauthorized(res) {
console.log('unauthorized --> 401');
res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return res.sendStatus(401);
}
var user = basicAuth(req);
console.log('basicAuth user:', user);
if (!user || !user.name || !user.pass) {
console.log('!user');
return unauthorized(res);
}
user_tools.checkCredentials(user.name, user.pass, function(valid) {
console.log('valid:', valid);
if (valid) {
return next();
} else {
return unauthorized(res);
}
});
}
};
app.get('/restricted_api/:value', auth, function(req, res) {
// do authorised stuff
});
아니, 나는 그렇지 않다. 'req.user = user; '를 추가했지만 실제 문제는 비동기식 finance'checkCredentials() 전에 미안할 때'auth()'미들웨어가 종료 될 때 console.log ('valid : ', valid))'반환합니다. Express 3.x에는 내가 가지고 있지 않은 비동기 요청에 대해'var pause = utils.pause (req); '라는 링크가있는 미들웨어가 있습니다. – Saran
그건 내가 눈치 챘을 한 가지였습니다. 한 번의 인증 기능에서 일시 중지를 사용하여 인증하는 동안 요청의 데이터/이벤트를 캡처 한 다음 해당 데이터/이벤트를 릴리스했습니다. 자세한 내용은 다음을 참조하십시오 (http://stackoverflow.com/questions/13412157/how-to-avoid-the-data-of-request-stream-loss-after-doing-some-authentication-on). 요청 본문/파일을 보내야하는 경우 일시 중지가 필요합니다. 당신이 진짜 문제를 발견 한 것 같습니다. – dliu