2015-10-13 60 views
1

我想“在注销时删除cookies”。我无法做到这一点。我用Google搜索的答案,发现以下几个方面:如何删除快递+护照js注销cookie?

  1. 分配过期的新日期,使用下面的行

    res.clearCookie('connect.sid', { path: '/' });

以使用网站

res.cookie('connect.sid', '', {expires: new Date(1), path: '/' });

  • 删除Cookie我试了两个wa ys个人,但他们不删除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); 
    }); 
    
  • 回答

    2

    您可以使用注销路线req.session.destroy破坏下面的会话参考:)

    app.get('/logout', function(req,res){ 
    req.logOut(); 
    req.session.destroy(function (err) { 
         res.redirect('/'); //Inside a callback… bulletproof! 
        }); 
    }); 
    
    +0

    感谢它的工作.. :)你让我很快乐.. !! – romir

    +0

    提及不兄弟:) –

    +1

    这是否应该在浏览器中破坏sid cookie? – dman

    0

    所以没有任何的代码这里的建议为我工作,直到我意识到我正在做一个愚蠢的:

    使用Github,我设置了一个OAuth应用程序(你可以在你的个人资料设置),并将其用于身份验证。

    工作过的魅力!但是,即使从我的应用程序注销,它总是会将我重新发回相同的配置文件。清除所有浏览器存储无法解决它。

    然后,我明白了,我仍然登录到我的github帐户(这是我总是得到的配置文件)...一旦我注销,那么OAuth应用程序提示我为我的用户/密码再次。

    1

    请试试这个:

    router.get('/logout', function (req, res) { 
        req.logOut(); 
        res.status(200).clearCookie('connect.sid', { 
        path: '/' 
        }); 
        req.session.destroy(function (err) { 
        res.redirect('/'); 
        }); 
    });