Как запросить аутентификацию в 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();
};
Другие вопросы по тегам