2015-10-13 64 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('/'); 
        }); 
    });