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

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

为了初始化everyauth,我使用:

app.use(everyauth.middleware()); 

我想跳过某些路由的身份validation 。 具体来说,我注意到findUserById被调用的每一个请求,我想跳过某些路由(例如没有validation/ getImage)。

那可能吗?

你可以手动包装everyauth.middleware()callback。

 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(); } }); 

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

从0.4.5开始, everyauth.middleware必须用Express的app对象来调用。 因此你可以这样创build一个打包的中间件:

 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));