Reputation: 99
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.
Upvotes: 6
Views: 15815
Reputation: 51
Try using this, earlier req.session.destroy was working fine but after updates it was not with passport and express-session. Having req.logout nested in req.session.destroy worked as others pointed out.
const logout = async (req, res) => {
req.session.destroy(function (err) {
if (err) {
console.log(`unable to destroy session`, err);
}
if (!err) {
req.logout((error) => {
if (error) console.log(`unable to logout`, error);
});
res.redirect("/login");
}
});
};
Upvotes: 0
Reputation: 602
You should not use href
<a href="/logout">Logout</a>
in logout.
Just create a <p>
or <button>
.
There is a conflict in your request.
Then, your res.redirect('/signup');
should works.
Upvotes: 0
Reputation: 488
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
Upvotes: 1
Reputation: 179
This solution works for me:
req.session.destroy(function () {
req.logout();
res.redirect('/');
});
Upvotes: 1
Reputation: 21
This worked for me.
.get('/logout', function (req, res) {
req.logout();
req.session = null;
res.redirect('/back/to/login');
});
Upvotes: 2
Reputation: 1038
Try destroying session, and logging out:
req.session.destroy();
req.logout();
res.redirect('/signup');
Upvotes: 1
Reputation: 355
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');
}
});
});
Upvotes: 7