小编典典

快速请求每个请求的更改会话

redis

我有登录功能

app.post('/doLogin', function(req,res){
        db.users.findOne({username: req.body.username}, function(err, user) {
            if( err ) {
                console.log("Login fail");
            } 
            else if (user != null) {
                if (req.body.password == user.password) {
                    req.session.user_role = "user";
                    req.session.save();
            } else {
                req.session.user_role = "null";
                console.log("Wrong login");
            }
        }
        res.send({redirect: "/"});
    });

});

此函数用于将变量保存到会话中,req.session.user_role = "user"; 但是当新请求检查用户是否登录时

app.get('/', function(req,res){
    redis.get('sess:' + req.session.id, function(err, result){
        console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null }));
    });
    if ((req.session.user_role == "user")) {
          console.log("Logged in");
    } else {
        console.log("Logged out");
    }
});

然后返回总是“注销”,因为会话已更改。我使用Redis来存储会话,我认为这是Redis的错误,因为当我停止使用Redis时,可以,请帮帮我!


阅读 304

收藏
2020-06-20

共1个答案

小编典典

最好的处理方式是始终让Express处理它(如果可以的话)。

https://flaviocopes.com/express-sessions/(更新了会话教程,尽管不应将链接视为答案)

有一个链接可以向您展示如何为Express中的会话设置Redis。在处理会话时,您甚至不必查询自己的redis,这是节点中中间件的工作。

2020-06-20