首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js: connect-mongo和Remember me复选框

node.js: connect-mongo和Remember me复选框
EN

Stack Overflow用户
提问于 2017-11-30 21:48:21
回答 1查看 602关注 0票数 0

我使用connect-mongo在DaaS中存储会话,然后我在登录页面中添加了一个记住我复选框,但是当我不选中文本框时,它仍然会将会话写入会话表中。我想知道我能做错什么:

server.js:

代码语言:javascript
复制
// server.js

// set up ======================================================================
// get all the tools we need
var express  = require('express');
var app      = express();
var port     = process.env.PORT || 5000;
var mongoose = require('mongoose');
var passport = require('passport');
var flash    = require('connect-flash');

var morgan       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var session      = require('express-session');
var MongoStore   = require('connect-mongo')(session);

var path = require('path'); //join method
var configDB = require('./config/database.js');

//pass passport for configuration
require('./config/passport')(passport); 

// configuration ===============================================================
mongoose.connect(configDB.url, {useMongoClient : true}); // connect to our database



// set up our express application
app.use(express.static(path.join(__dirname, 'views')));    //angular and css files
app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms
app.set('view engine', 'ejs'); // set up ejs for templating

//required for passport
app.use(session({
    store: new MongoStore({ mongooseConnection: mongoose.connection,  ttl: 14 * 24 * 60 * 60, autoRemove:'native', collection:'AllSessions' }),
    secret: 'foo'
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions

// use connect-flash for flash messages stored in session
app.use(flash()); 

// routes ======================================================================
require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport


//log all other requests here
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname, 'views'));
    });

// launch ======================================================================
app.listen(port);
console.log('The magic happens on port ' + port);

routes.js (POST代码):

代码语言:javascript
复制
// process the login form
app.post('/login', passport.authenticate('local-login', {
    successRedirect: '/profile', // redirect to the secure profile section
    failureRedirect: '/login', // redirect back to the signup page if there is an error
    failureFlash: true // allow flash messages
}),

function(req, res, next)
{
    if (!req.body.remember_me)
    {
        return next();
    }
    else{
        app.use(session({
            store: new MongoStore({ mongooseConnection: mongoose.connection,  ttl: 14 * 24 * 60 * 60, autoRemove:'native', collection:'AllSessions' }),
            secret: 'foo'
        }));
    }
});

如有任何建议,欢迎光临。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 22:35:42

当单击remember me时,您正在尝试初始化会话,所以不要这样做。使用最小超时时间初始化会话,然后使用以下代码:

代码语言:javascript
复制
app.use(session({
  store: new MongoStore({ mongooseConnection: mongoose.connection,  ttl: 3600000, autoRemove:'native', collection:'AllSessions' }),
  secret: 'foo'
}));

app.post('/login', passport.authenticate('local-login', {
    successRedirect: '/profile', // redirect to the secure profile section
    failureRedirect: '/login', // redirect back to the signup page if there is an error
    failureFlash: true // allow flash messages
}),

function(req, res, next)
{
        if (!req.body.remember_me)
        {
            req.session.cookie.expires = false;
            return next();
        }
        else{
           req.session.cookie.maxAge = 2628000000; // for one month.
        }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47575030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档