4

我正在编写一个基于 Express.js 的应用程序,同时使用 Everyauth 进行身份验证。

要初始化everyauth,我使用:

app.use(everyauth.middleware());

我想绕过某些路由的身份验证。具体来说,我注意到 findUserById 会为每个请求调用,我想在某些路由中跳过它(例如,/getImage 没有身份验证)。

那可能吗?

4

2 回答 2

3

您可以手动包装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();
  }
});

这不过是一个包装好的中间件。

于 2012-02-13T19:38:04.947 回答
1

从 0.4.5 开始,everyauth.middleware必须使用 Express 的app对象调用。因此,您可以通过这种方式创建一个包装的中间件:

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));
于 2013-10-06T10:04:52.580 回答