Express.js: как обойти Everyauth для определенных маршрутов? - PullRequest
4 голосов
/ 13 февраля 2012

Я пишу приложение, основанное на Express.js, и использую Everyauth для аутентификации.

Для инициализации Everyauth я использую:

app.use(everyauth.middleware());

Я бы хотел обход аутентификации для определенных маршрутов.В частности, я заметил, что findUserById вызывается для каждого запроса, и я хотел бы пропустить его для определенных маршрутов (например, без аутентификации для /getImage).

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Вы можете обернуть обратный вызов everyauth.middleware() вручную.

var auth = everyauth.middleware();
app.use(function(req, res, next) {
  if (shouldAuthRequest(req)) {
    // call auth, as if it was part of the route
    auth(req, res, next);
  } else {
    // ignore auth
    next();
  }
});

Это не что иное, как упакованное промежуточное ПО.

1 голос
/ 06 октября 2013

Начиная с 0.4.5, everyauth.middleware должен вызываться с объектом app Express.Поэтому вы можете создать упакованное промежуточное ПО следующим образом:

var my_auth_middleware = function(app) {
  var auth = everyauth.middleware(app);
  // a custom middleware wrapping everyauth
  var middleware = function(req, res, next) {
    if (shouldAuthRequest(req)) {
      // go through the everyauth middleware
      auth(req, res, next);
    } else {
      // bypass everyauth
      next();
    }
  };
  // these allow the middleware to be "mounted" by Express
  middleware.set = true;
  middleware.handle = middleware;
  middleware.emit = auth.emit;
  // return our custom middleware
  return middleware;
};

, а затем добавить ваше упакованное промежуточное ПО в стек с помощью

app.use(my_auth_middleware(app));
...