NodeJS会话authentication

我正在尝试设置login会话,以便所有应该被login限制的页面都只是redirect到login屏幕。 不幸的是, app.get似乎很奇怪,而且在某些情况下不会触发。

例如,我的身份validationfunction:

 function authenticate(req,res) { var pass = false; if (req.session.loggedIn) pass = true; console.log(pass); if (pass) { next(); } else { res.redirect("/html/login.html"); } } 

和我的server.js:

 app.use(express.static(__dirname)); app.use(express.json()); app.use(express.urlencoded()); app.use(express.cookieParser()); app.use(express.session({secret: 'secretkey'})); //not my real key //gets app.get("/onePlayer",authenticate); app.get("/",authenticate); app.get("/logout",function(req,res) { req.session.destroy(); res.redirect("/"); }); 

/获得身份validation,我可以看到它在我的terminal,但/onePlayer根本不触发,我可以不login进入该页面。

注意: /onePlayer是一个目录。 主页是onePlayer/index.html (尝试完整path,也没有触发器)。 我也确定通过注销和销毁会话来销毁会话。

为什么函数没有被调用/onePlayer ? 我无法弄清楚。

这里的问题是, onePlayer是一个目录,在你的代码中,你首先优先存在的文件, 然后到你的app.get调用。

改变你的代码看起来像这样:

 app.use(express.json()); app.use(express.urlencoded()); app.use(express.cookieParser()); app.use(express.session({secret: 'secretkey'})); //not my real key app.get("/onePlayer",authenticate); app.use(express.static(__dirname)); // Moved this after the app.get so that it has a lower priority app.get("/",authenticate); app.get("/logout",function(req,res) { req.session.destroy(); res.redirect("/"); });