在路由处理中绕过authentication

我已经build立了一个注册主页和几个需要login的内部页面的应用程序。 我用Express.jsbuild立服务器和控制路由和身份validation工作正常:如果我尝试访问localhost:端口/ clientPage我得到所需的页面,如果我以前login和一个错误消息,否则。

问题是如果我尝试访问localhost:port / clientPage。 即使我没有活动的会话,我得到clientPage。 在这种情况下,我怎样才能确保前面描述的相同的行为? 我将我的GET路由的代码附加到clientPage:

router.get('/clientPage', function (req, res, next) { User.findById(req.session.userId) .exec(function (error, user) { if (error) { return next(error); } else { if (user === null) { var err = new Error('Not authorized! Go back!'); err.status = 400; return next(err); } else { return res.sendFile(path.join(__dirname + '/../views/clientPage.html')); } } }); }); 

由于问题是由于添加.html的路由,以某种方式绕过authentication路线的结束。 我认为你很有可能

express.static(path.join(__dirname, "views")在您的应用程序公开提供您的文件夹的开始处。

为什么它压倒你的路线?

Express通过app.use(...)按顺序运行中间件。 语句app.use(express.static...)放在app.use(// your router) ,响应早已parsing到客户端。

使用这些知识,您可以通过在路由之前放置身份validation中间件来轻松地限制其他路由,而不是在每个特定路由中embedded数据库调用。

 app.use(require("./middleware/auth")); app.use("/homepage", require("./routes/homepage")); app.use("/clientPage", require("./routes/clientPage"));