![](/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.