我正在尝试设置一个已登录的 session ,以便所有应受登录限制的页面都可以简单地重定向到登录屏幕。不幸的是,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
(也尝试了完整路径,没有触发)。我还确保通过注销并销毁 session 来销毁 session 。
为什么没有为 /onePlayer
调用函数?我想不通。
最佳答案
这里的问题是 onePlayer
是一个目录,在您的代码中,您首先优先考虑存在的文件,然后您的 app。接
电话。
将您的代码更改为如下所示:
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("/");
});
关于javascript - NodeJS session 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295297/