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