Passport Sessions在浏览器关闭时没有被破坏

时间:2014-03-27 07:16:45

标签: node.js session azure couchbase passport.js

我有一个Node.js服务器,我使用护照进行会话管理。计划使用它来实现很快记住我的服务器功能。但我有一个问题,正常会议基本上是一个记住我。 Aka会话cookie connect.sid在浏览器关闭时没有被破坏,我认为这不是正确的行为。我使用connect-bluesky作为会话存储(使用azure表)和couchbase来存储默认会话信息以供将来使用。

相关代码:

Server.js

app.configure(function()
{
    app.use(express.logger('dev')); // log every request to the console

    // set up our express application
    app.use(express.cookieParser());
    app.use(express.json())
    .use(express.urlencoded());

    app.use(express.static(__dirname));

    var db = new couchbase.Connection({host: 'http://localhost:8091', bucket: 'default'}, function (err){

        console.log("In cb connect");
        console.log(err);

    });

    app.use(express.session({secret: 'SECRET', 
        store: new BlueskyStore({
          account: 'ACCOUNT',
          key: 'KEY',
          table: 'sessionsTable',
          cookie: { path: '/', httpOnly: true, maxAge: null }
        })
    }));

    app.engine('html', engines.ejs);
    //app.set('views', __dirname+'/views');
    app.set('view engine', 'html');

    var data = fs.readFileSync( __dirname+"/"+process.argv['2'],'utf8');
    GLOBAL.infoJSON = JSON.parse(data);

    require('./config/passport')(passport, infoJSON);
    app.use(passport.initialize());
    app.use(passport.session()); // persistent login sessions
    app.use(flash()); // use connect-flash for flash messages stored in session

    app.use(app.router);

});

Routes.js

function isLoggedIn(req, res, next) {


    if (req.isAuthenticated())
        return next();

    res.redirect('/');
}

app.post('/login2', passport.authenticate('local-login'),
  function(req, res) 
  {
    var input = "irrelevant input string";

    var loginInfo = {
        input : input,
        userName : req.user.id,
        repoId : req.user.repoId
    }

    edgeMod.loginWF(loginInfo, req, res, function (req, res, result)
    {
        res.write(result);
        res.end();
    });
});

app.get('/logout', function(req, res)
{
  req.logout();
  res.redirect('/');
});

passport.js

    passport.serializeUser(function(user, done) {

        db.set(user.id, user, function(err, result) {
            done(null, JSON.stringify(user));
        });

    });

    passport.deserializeUser(function(json, done) 
    {      
        var user = JSON.parse(json);        
        db.get(user.id, function(err, result) 
        {
            if (result)
            {

                done(null, result.value);
            }
            else
            {
                done(new Error("Bad JSON string in session"), null);
            }
        });

    });

  passport.use('local-login', new LocalStrategy({

        usernameField : 'email',
        passwordField : 'password',
        passReqToCallback : true 
    },
    function(req, email, password, done) 
    { 
        ---login checks---
        return done(null, serializeJson);

        });

    }));

如何确保会话在浏览器关闭时被销毁?这是我第一次做这样的事情的任何提示吗?

编辑:似乎是在Firefox中关闭浏览器关闭会话,但不是在Chrome中关闭。这可能与关闭时记住Chrome的页面有关吗?

1 个答案:

答案 0 :(得分:2)

在"继续你离开的地方"在chrome选项中打勾似乎是个问题。不勾选浏览器关闭会话。