I want to “delete cookies on logout”. I am not able to do that. I googled for answer and found following ways:
Assign new date of expiration to cookie
res.cookie('connect.sid', '', {expires: new Date(1), path: '/' });
Delete cookie using below lines
res.clearCookie('connect.sid', { path: '/' });
I tried both ways individually but they do not delete the cookie.
Here is my code:
routes.js
JavaScript
x
47
47
1
module.exports = function(app, passport, session){
2
app.get('/', function(req, res)
3
{
4
res.render('index.ejs');
5
});
6
7
app.get('/login', function(req,res){
8
res.render('login.ejs',{message:req.flash('loginMessage')});
9
});
10
11
12
app.get('/signup',checkRedirect , function(req, res) {
13
res.render('signup.ejs',{message: req.flash('signupMessage')});
14
});
15
app.get('/profile', isLoggedIn, function(req,res) {
16
res.render('profile.ejs', {
17
user :req.user
18
});
19
});
20
app.post('/signup', passport.authenticate('local-signup', {
21
successRedirect : '/profile',
22
failureRedirect : '/signup',
23
failureFlash : true
24
}));
25
app.post('/login', passport.authenticate('local-login', {
26
27
successRedirect : '/profile',
28
failureRedirect : '/login',
29
failureFlash :true
30
31
}));
32
app.get('/logout',function(req,res){
33
res.cookie('connect.sid', '', {expires: new Date(1), path: '/' });
34
req.logOut();
35
res.clearCookie('connect.sid', { path: '/' });
36
res.redirect('/');
37
});
38
39
function isLoggedIn(req, res, next){
40
41
if(req.isAuthenticated())
42
return next();
43
44
console.log("hiii");
45
res.redirect('/');
46
}
47
};
server.js
JavaScript
1
56
56
1
var express = require('express');
2
var app = express();
3
var port = process.env.PORT || 3000;
4
var mongoose = require('mongoose');
5
var passport = require('passport');
6
var flash=require('connect-flash');
7
var morgan=require('morgan');
8
var bodyParser = require('body-parser');
9
var cookieParser=require('cookie-parser');
10
//
11
var session=require('express-session');
12
var RedisStore = require('connect-redis')(session);
13
var redis = require("redis");
14
var redis_client = redis.createClient();
15
app.use(bodyParser.json());
16
app.use(bodyParser.urlencoded({extended: true}));
17
var configDb=require('./config/database.js');
18
mongoose.connect(configDb.url);
19
20
require('./config/passport')(passport);
21
22
app.use(morgan('dev'));
23
app.use(cookieParser());
24
app.use(bodyParser());
25
app.set('view engine', 'ejs');
26
27
28
app.use(session({
29
store: new RedisStore({
30
host: '127.0.0.1',
31
port: 6379,
32
client: redis_client
33
}),
34
secret : 'foo',
35
resave: false,
36
saveUninitialized: false
37
}));
38
app.use(function (req, res, next) {
39
if (!req.session) {
40
return next(new Error('oh no')); // handle error
41
}
42
next();
43
});
44
45
46
});
47
48
app.use(passport.initialize());
49
app.use(passport.session());
50
app.use(flash());
51
52
require('./app/routes')(app, passport, session);
53
app.listen(port, function(){
54
console.log('server is at port' + port);
55
});
56
Advertisement
Answer
You can use req.session.destroy in logout route to destroy the session below is the code for reference 🙂
JavaScript
1
7
1
app.get('/logout', function(req,res){
2
req.logOut();
3
req.session.destroy(function (err) {
4
res.redirect('/'); //Inside a callback… bulletproof!
5
});
6
});
7