我正在尝试设置一个已登录的会话,以便应限制登录的所有页面都直接重定向到登录屏幕。不幸的是,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("/");
});

关于javascript - NodeJS session 身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22295297/

10-09 21:25