2013-11-24 3 views
0

Я настраиваю динамические маршруты и используя basicAuth (когда пользователь/пароль настроен). Вот что у меня есть:NodeJS - Express bypass basicAuth

var basicAuth = express.basicAuth, 
auth = function(req, res, next) { 
    if (config.hasOwnProperty(req.params.project)) { 
     var auth = config[req.params.project].auth; 
     if (auth) { 
      basicAuth(function(user, pass, callback) { 
       // Check credentials 
       callback(null, user === auth.user && pass === auth.pass); 
      })(req, res, next); 
     } else { 
      // No authentication 
      return true; 
     } 
    } 
}; 

Тогда мой маршрут выглядит следующим образом:

app.get("/:project", auth, function (req, res) { 
    ... 
}); 

Это получение конфигурации из файла, который либо содержит auth объект с auth.user и auth.pass или установлен в false. Когда установлено значение false, я бы хотел (очевидно) пропустить аутентификацию.

BasicAuth работает, когда включен, но я не могу понять, как динамически обойти его.

ответ

2

Connect не проверяет возвращаемое значение промежуточного программного обеспечения, поэтому возврат true ничего не значит. Вам нужно вызвать функцию next, чтобы Connect знал, что нужно продолжить.

var basicAuth = express.basicAuth, 
auth = function(req, res, next) { 
    if (config.hasOwnProperty(req.params.project)) { 
     var auth = config[req.params.project].auth; 
     if (auth) { 
      basicAuth(function(user, pass, callback) { 
       // Check credentials 
       callback(null, user === auth.user && pass === auth.pass); 
      })(req, res, next); 
     } else { 
      // No authentication 
      next(); 
     } 
    } 
}; 

Кроме того, это выглядит как basicAuth обратного вызова может быть синхронным, так что, вероятно, чище, чтобы сделать это:

basicAuth(function(user, pass) { 
    // Check credentials 
    return user === auth.user && pass === auth.pass; 
})(req, res, next); 

Наконец, basicAuth имеет другую альтернативную форму, так что вы можете просто сделать:

basicAuth(auth.user, auth.pass)(req, res, next); 
+0

ha, хорошо, что делает общий смысл ... – Fluidbyte

+0

Счастливые помочь. Обновлено еще несколькими комментариями. – loganfsmyth