Express.js:如何绕过Everyauth某些路线?

时间:2012-02-13 19:22:46

标签: node.js express everyauth

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

为了初始化每一个,我使用:

app.use(everyauth.middleware());

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

这可能吗?

2 个答案:

答案 0 :(得分: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();
  }
});

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

答案 1 :(得分:1)

从0.4.5开始,必须使用Express的everyauth.middleware对象调用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));