簡體   English   中英

NodeJS會話認證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM