在路由处理中绕过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"));
- 使用express-jwt时,为什么我的授权标题在显式存在的时候丢失了
- req.session.passport和req.user空白,req.isAuthenticated在初次成功login后使用passport-facebook返回false
- 分离的客户端和服务器的身份验
- 具有Express和Mongoose的BasicAuth
- PHP – 计算正确的HMAC签名为nodejs脚本
- PassportJS – GET请求中的login凭据?
- 一个好的npm模块散列和腌制用户login/ passwd?
- 在使用Passport-local作为validation策略的快速应用程序中,不受保护的端点
- 使用express-jwt作为中间件来validationAzure AD颁发的令牌