req.session.destroy() not working in Nodejs

11,263

Solution 1

Please redirect once session destroy. You have to move your code for redirect in call back.

router.get('/logout', function(req, res) {
  req.session.destroy(function(err){
     if(err){
        console.log(err);
     }else{
         console.log(session.email);
         req.end();
         res.redirect('/signup');
     }
  });

});

Solution 2

This worked for me.

.get('/logout', function (req, res) {
    req.logout();
    req.session = null; 
    res.redirect('/back/to/login');
});

Solution 3

I did two things and got it worked. First, I set unset to destroy in session options. Secondly, delete session as follows

router.get('/logout', function(req, res) {
        delete req.session;
        res.redirect('/signup');
    });

ref https://github.com/expressjs/session

Solution 4

Try destroying session, and logging out:

 req.session.destroy();
 req.logout();
 res.redirect('/signup');

Solution 5

This solution works for me:

req.session.destroy(function () {
    req.logout();
    res.redirect('/');              
});
Share:
11,263
Harshit Sharma
Author by

Harshit Sharma

Updated on July 03, 2022

Comments

  • Harshit Sharma
    Harshit Sharma almost 2 years

    Trying to perform logout operation by destroying session using req.session.destroy() in Nodejs but it is not working.

    Nodejs code:

    router.get('/logout', function(req, res) {
      req.session.destroy();
      console.log(session.email);
      res.redirect('/signup');
    });
    

    I am calling /logout api from my html file.

    HTML CODE:-

    <div class="container-fluid">
            <header class="row top text-center">
                <div class="col-md-2 righttopnav" >
                    <a href="index" style="font-size:25px;">Auto<b>SecT</b></a>
                </div>
                <div class="col-md-10 topnav" id="myTopnav">
                    <%if(session.email){%>
                    <a href="/logout">Logout</a>
                    <% } else { %>
                    <a href="/signup">Signup / Login</a>
                    <% } %>
                    <a href="#career">Career</a>
                    <a href="#clients">Clients</a>
                    <a href="#services">Services</a>
                </div>
            </header>
    
            <section class="content">   
                <div class="row text-center">
                    <div class="col-md-12 " >
                        <p class="p1"><%-session.email%>Scan your Website or APP with just a <b>click!</b></p>
                    </div>
                </div>
            </section>
    
            <div class="row text-center" style="padding-top:5%;">
                <div class="col-md-4">
                    <i class="fa fa-globe fa-5x" aria-hidden="true" style="color:#c2c2a3"></i>
                    <br>
                    <input class="url" type="url"  placeholder="Enter your url" style="border-radius: 20px ">
                </div>  
                <div class="col-md-4">
                    <p class="p">OR</p>
                </div>
                <div class="col-md-4">
                    <i class="fa fa-file-o fa-5x" aria-hidden="true" style="color:#c2c2a3; padding-bottom: 4% "></i>
                    <br>
                    <label class="btn btn-primary btn-sm  btn-file upload">
                    <i class="fa fa-upload fa-2x" aria-hidden="true"></i>
                    <input type="file" style="display: none;">
                    </label>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <div class="col-md-12 text-center" style="padding-top: 5%; margin-bottom: 1%; border-radius: 20%;">
                    <input type="submit" id="button" class="btn btn-success btn-md" value="Scan">
                </div>
                </div>
            </div>
    </div>
    

    /logout redirects me to the required page but session does not get destroyed.