如何在Node JS中添加会话

时间:2018-11-14 13:21:48

标签: javascript node.js express session

我们正在为我们的编程课程开发一个项目。我们正在做一个非常小的社交媒体平台,您可以在其中注册,登录,创建个人资料,查看事件并注销。

因此,我设置了用于登录的会话变量,但我也希望注册的人能够立即登录并重定向到个人资料站点。所以我想我必须在注册app.post中设置另一个会话,但是我绝对不知道该怎么做(因为我是个流血的初学者)...有人可以帮忙吗?到目前为止,这是代码:

//------------Sessionvariables---------------//
app.get('/', requiresLogin, function(req, res) {
    res.render('home', {
        'username': req.session.user.name
    });
});

app.post('/sendLogin', function(req, res) {
    //in Datenbank gucken
    const user = req.body["username"];
    const password = req.body["password"];
    db.get(`SELECT * FROM users WHERE username='${user}'`, function(err, row) {
        if (row != undefined) {
            if(password == row.password) {
                req.session['user'] = user;
                res.redirect('/home');
            }else{
                res.redirect('/loginerror');
            }
        }else{
            res.redirect('/loginerror');
        }
        if(err){
            console.error(err.message);
        }
    });
});

app.get('/logout', function(req, res){
    req.session.destroy(function (err) {
      if (err) return next(err)
        req.session = null;
      res.redirect('/start-login');
    });
});

// Registration
app.post('/registration', function(req, res) {
    const { email, password, username, domicile } = req.body;
        // validation
    db.run(`INSERT INTO users(email,password,username,domicile) VALUES(?, ?, ?, ?)`, [email, password, username, domicile], function(err) {
         if (err) {
             return console.log(err.message);
         }
         return res.redirect('/edit_profile');
     });
});

我知道我必须将会话写入app.post / registration-部分,但是我不知道如何编写。我正在使用Node js,Express和sqlite3 ...

谢谢!

2 个答案:

答案 0 :(得分:0)

为什么不这样做:

// Registration
app.post('/registration', function(req, res) {
    const { email, password, username, domicile } = req.body;
        // validation
    db.run(`INSERT INTO users(email,password,username,domicile) VALUES(?, ?, ?, ?)`, [email, password, username, domicile], function(err) {
         if (err) {
             return console.log(err.message);
         } else {
             // Create the session / save any data you want here
             req.session.user.name = username;
             /* I would actually call somthing like: createSession(req)
                dedicated function that nicely creates the session */
             // Redirect to home just like you do after successful login
             res.redirect('/home'); // Redirect to home since user registered successfully
         }
     });
});

通过这种方式,在运行其他代码逻辑之前总是要处理错误,我看到您正在代码末尾处理错误(在app.post('/sendLogin',...)中:

if(err){
  console.error(err.message);
}

这样写:

if(err){
  console.error(err.message);
  // and res.end() or similar if its in an express route
} else {
  // Do safe stuff here
}

答案 1 :(得分:0)

我可以建议您的最好方法是,注册成功后,在会话中设置用户详细信息,然后直接重定向到您的主页