【问题标题】:NodeJS Session AuthenticationNodeJS 会话认证
【发布时间】:2014-03-10 16:45:21
【问题描述】:

我正在尝试设置一个登录会话,以便所有应该限制登录的页面都简单地重定向到登录屏幕。不幸的是,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 调用函数?我想不通。

【问题讨论】:

    标签: javascript html node.js session


    【解决方案1】:

    这里的问题是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("/");
    });
    

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2014-08-16
      相关资源
      最近更新 更多