我正在编写一个基于 Express.js 的应用程序,同时使用 Everyauth 进行身份验证。
要初始化everyauth,我使用:
app.use(everyauth.middleware());
我想绕过某些路由的身份验证。具体来说,我注意到 findUserById 会为每个请求调用,我想在某些路由中跳过它(例如,/getImage 没有身份验证)。
那可能吗?
您可以手动包装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();
}
});
这不过是一个包装好的中间件。
从 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));