![](/img/trans.png)
[英]Authentication with NodeJS, Express-Session and Passport fails
[英]NodeJS Session Authentication
我正在尝试设置登录会话,以便所有应该登录限制的页面只是重定向到登录屏幕。 不幸的是, app.get
似乎表现app.get
奇怪,并且在某些情况下不会触发。
例如,我的身份验证功能:
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("/");
});
/
得到身份验证,我可以在我的终端中看到它,但是/onePlayer
根本没有触发,我可以在不登录的情况下访问该页面。
注意: /onePlayer
是一个目录。 主页面是onePlayer/index.html
(也尝试了完整路径,没有触发器)。 我还确保通过注销和销毁会话来销毁会话。
为什么没有为/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("/");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.