使用nodeJS会话?

时间:2018-03-21 07:41:00

标签: node.js mongodb

我正在构建登录和注销功能,当我点击登录它生成我的会话但是当我点击注销它不会破坏我的会话如何解决它? *我已经检查了evey解决方案的位置。* 我正在使用mongodb来检查凭据。这是我的代码。

app.post('/checkadminlogin', (req,res) => {
    // console.log(req.body);
    var email = req.body.email;

    var password = req.body.password;
    MongoClient.connect(url, (err,db) => {

        if(err) throw err;
        var dbo = db.db("mydb");
        dbo.collection('adminlogin').find({ 'email': email, 'password': password }, {_id: 1, email: 1, password: 1}).toArray(function(err,result){
            if(err) throw err;

            if(Object.keys(result).length === 0){
            res.send("Email or Password is wrong");         
            }           
            else{
                adminsess = JSON.stringify(result[0].email);
                req.session.admin = adminsess;
                res.redirect('/admindashboard');    
            }
        });
    }); 
});


app.get('/logoutadmin', (req,res) => {      
            req.session.reset();
            res.redirect('/');  
});

2 个答案:

答案 0 :(得分:2)

您只需使用此代码(如下所示)作为退出路线。

  app.get('/logoutadmin', (req,res) => {        
    req.session.destroy(function () {               
     res.redirect('/');              
    });     
  });

答案 1 :(得分:0)

  

销毁会话,删除req.session,接下来将重新生成   要求:

 req.session.destroy(function(err) {    
  // cannot access session here   
 })

这并不意味着当前会话将在下一个请求中重新加载。这意味着将在下次请求时在会话存储中创建一个干净的空会话。 (据推测会话ID不会改变,但我没有测试过。)

因此,在您的情况下,在注销请求时,您无法重置在登录请求中创建的会话{1}},因为在注销请求时会生成新的 req.session ,所以我建议从加载到注销,从整个应用程序使用单个全局会话。

参考:https://github.com/expressjs/session