javascript - NodeJS session 认证

标签 javascript html node.js session

我正在尝试设置一个已登录的 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/

相关文章:

html - 如何将图像放在 div 中,使其完全适合 div?

html - 如何将一个 <div> 元素放在另一个 <div> 之下

node.js - 我们如何知道 TURN 或 STUN 服务器是否已连接?

javascript - 如何通过 WebRTC 轨道发送音频和视频?

javascript - 当打包的 Electron 应用程序在 MacOS 上运行时,path.resolve ("") 返回根目录 ("/")

javascript - 从 Facebook 帖子打开 Chrome/Firefox (Android OS) 的 URL 方案

jquery - 检测单个或多个文件拖动

javascript - 在另一个 js 文件中导入或 require js 文件

javascript - nodejs和MongoDB的collection.find()没有响应

javascript - 在 HTML 文件中使用 Javascript 逐行读取文本文件并存储在变量中