This question显示了如何解析授权标头,但如何请求客户端发送授权?我想我必须设置一个标题,但是如何在节点中这样做,我不确定。当然,如果没有,我只发送一个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的标题部分以节省处理和带宽。
答案 0 :(得分:0)
好的,这就是我想出来的。
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();
};