Pergunta

I am developing in node and express. And I am trying to make a remember me login. I am reading a lot of things on the web, but can't make it work. I don't know if there is a receipe, and if there it is, I could't find it.

I was trying with redis and express session. And is working partially. If a restart node server, or close and reopen chrome. Session is active. So going into "/" will redirect me to "/index.html".

But if I restart the pc, I lost session. So goning into "/" will redirect me to "login" Here some significant code from my server:

var redisClient = require('redis').createClient();
var RedisStore = require('connect-redis')(express);
app.use(bodyParser());
app.use(cookieParser());
app.use(express.session({
  store: new RedisStore({
    host: 'localhost',
    port: 6379,
    db: 0,
    cookie: { maxAge: (24*3600*1000*30)}, // 30 Days in ms
    client : redisClient
  }),
  secret: 'seeeecret'
}));

app.get('/', function(req, res, next) {
    res.redirect('/index.html');
});

app.post('/login', function(req, res) {
    function loginSuccess() {
        req.session.regenerate(function() {
            req.session.user = req.body.usuario;            
        res.sendfile('index.html', {root: './static'});
        });
    }
    function loginFailure(errText, errCode) {
        console.log("failed to login. "+errCode+": "+errText);
        res.redirect('/login');
    }
    //Imap email login (the user will authenticate with his email, end email's pass)
    checkPassword(req.body.usuario, req.body.server, req.body.password, loginSuccess, loginFailure);
});

function restrict(req, res, next) {
    if (req.session.user) { 
        next();
    } else {
        req.session.error = 'Access denied!';
        res.redirect('/login'); 
    }
}
Foi útil?

Solução

It seems that you have the "cookie" in the wrong place:

app.use(express.session({
  cookie: { maxAge: (24*3600*1000*30)}, // <-- where it belongs
  store: new RedisStore({
    host: 'localhost',
    port: 6379,
    db: 0,
    client : redisClient
  }),
  secret: 'seeeecret'
}));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top