我正在编写基于Express.js的应用程序,同时使用Everyauth进行身份验证。
为了初始化每一个,我使用:
app.use(everyauth.middleware());
我想为某些路线绕过身份验证。 具体来说,我注意到每个请求都会调用findUserById,我想跳过某些路由(例如,没有对/ getImage进行身份验证)。
这可能吗?
答案 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));