Как запросить аутентификацию в NodeJS
Этот вопрос показывает, как анализировать заголовки авторизации, но как я могу запросить у клиента отправку авторизации? Я думаю, что я должен установить заголовок, но как это сделать в узле, я не уверен. Конечно, если это не так, я просто отправляю 401, но Chrome не знает, попросить ли у меня имя пользователя и пароль (вероятно, по уважительной причине). Вот что у меня так далеко.
var authenticate = function(req, res, next){
var header=req.headers['authorization']||'', // get the header
token=header.split(/\s+/).pop()||'', // and the encoded auth token
auth=new Buffer(token, 'base64').toString(), // convert from base64
parts=auth.split(/:/), // split on colon
username=parts[0],
password=parts[1];
if(header ==''){
res.send(401, 'Invalid username or password');
next('Incorrect username or password');
}
else next();
};
app.use(authenticate);
Кроме того, если он не устанавливает заголовок, я просто хочу вернуть часть заголовка 401, чтобы сохранить обработку и пропускную способность.
1 ответ
Хорошо, вот что я придумал.
var authenticate = function(req, res, next){
if(un == undefined && pw == undefined) { next(); return; }
if(!req.headers['authorization']){
res.writeHead(401, {'WWW-Authenticate': 'Basic realm="My Test App"', 'Content-Type': 'text/plain'});
res.end();
return;
}
var header=req.headers['authorization']||'', // get the header
token=header.split(/\s+/).pop()||'', // and the encoded auth token
auth=new Buffer(token, 'base64').toString(), // convert from base64
parts=auth.split(/:/), // split on colon
username=parts[0],
password=parts[1];
if(username != un || password != pw){
res.send(401, 'Invalid username or password');
next('Incorrect username or password');
}
else next();
};