如何删除快递+护照js注销cookie?
我想“在注销时删除cookies”。 我无法做到这一点。 我googlesearch答案,并find以下方法:
-
为cookie分配新的过期date
res.cookie('connect.sid', '', {expires: new Date(1), path: '/' });
-
使用下面的行删除cookie
res.clearCookie('connect.sid', { path: '/' });
我单独尝试了两种方法,但不删除cookie。
这是我的代码:
routes.js
module.exports = function(app, passport, session){ app.get('/', function(req, res) { res.render('index.ejs'); }); app.get('/login', function(req,res){ res.render('login.ejs',{message:req.flash('loginMessage')}); }); app.get('/signup',checkRedirect , function(req, res) { res.render('signup.ejs',{message: req.flash('signupMessage')}); }); app.get('/profile', isLoggedIn, function(req,res) { res.render('profile.ejs', { user :req.user }); }); app.post('/signup', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/signup', failureFlash : true })); app.post('/login', passport.authenticate('local-login', { successRedirect : '/profile', failureRedirect : '/login', failureFlash :true })); app.get('/logout',function(req,res){ res.cookie('connect.sid', '', {expires: new Date(1), path: '/' }); req.logOut(); res.clearCookie('connect.sid', { path: '/' }); res.redirect('/'); }); function isLoggedIn(req, res, next){ if(req.isAuthenticated()) return next(); console.log("hiii"); res.redirect('/'); }
};
server.js
var express = require('express'); var app = express(); var port = process.env.PORT || 3000; var mongoose = require('mongoose'); var passport = require('passport'); var flash=require('connect-flash'); var morgan=require('morgan'); var bodyParser = require('body-parser'); var cookieParser=require('cookie-parser'); // var session=require('express-session'); var RedisStore = require('connect-redis')(session); var redis = require("redis"); var redis_client = redis.createClient(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); var configDb=require('./config/database.js'); mongoose.connect(configDb.url); require('./config/passport')(passport); app.use(morgan('dev')); app.use(cookieParser()); app.use(bodyParser()); app.set('view engine', 'ejs'); app.use(session({ store: new RedisStore({ host: '127.0.0.1', port: 6379, client: redis_client }), secret : 'foo', resave: false, saveUninitialized: false })); app.use(function (req, res, next) { if (!req.session) { return next(new Error('oh no')); // handle error } next(); }); }); app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); require('./app/routes')(app, passport, session); app.listen(port, function(){ console.log('server is at port' + port); });
您可以在注销path中使用req.session.destroy来销毁下面的会话是参考代码:)
app.get('/logout', function(req,res){ req.logOut(); req.session.destroy(function (err) { res.redirect('/'); //Inside a callback… bulletproof! }); });
所以这里没有任何build议为我工作,直到我意识到我在做一个愚蠢的事情:
使用Github,我设置了一个OAuth应用程序(您可以在configuration文件设置中执行此操作),并将其用于身份validation。
做了一个魅力! 但是,即使从我的应用程序注销,它也总是将相同的configuration文件发回给我。 清除所有的浏览器存储没有解决它。
然后,我明白,我仍然login到我的github帐户(这是我总是得到的configuration文件)…一旦我退出,那么OAuth应用程序提示我再次为我的用户/密码。