session - node - pasando los datos de la sesión del pasaporte a redis en producción
node js express-session example (0)
Estoy tratando de pasar la sesión desde el pasaporte después de la autenticación, y almacenar la sesión de datos en redis. He leído algunos artículos que el pasaporte no puede manejar la sesión durante la producción en vivo, por lo que he decidido utilizar redis como almacenamiento de sesión. Ahora mi problema es que no tenía idea de qué está pasando con el código, parece que no almacena una sesión. cuando req.session
la req.session
todo lo que tengo son las cookies. Estoy tratando de almacenar datos como req.session.user
pero no funcionó. Aquí está mi código:
passport.use(''login'', new LocalStrategy({ passReqToCallback: true},
function(req, username, password, done) {
user_model.Authenticate(username, function(err, rows) {
var exist = rows.length > 0 ? true : false;
if(exist) {
var user = rows[0];
var value = bcrypt.compareSync(password, user.password_ln);
if(value) {
req.session.regenerate(function() {
req.session.cookie.maxAge = 604800000;
req.session.user = user // contains user information in json
})
return done(null, user);
}
} else {
return done(null, false);
}
});
}
));
// serialize and deserialize
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(username, done) {
done(null, {username: username});
});
preparar
var express = require(''express'');
var redis = require("redis");
var session = require(''express-session'');
var redisStore = require(''connect-redis'')(session);
var parser = require(''body-parser'');
var RedisClient= redis.createClient({detect_buffers: true});
app.use(session({
secret: ''mysecretsdasdasdasdasd'',
store: new redisStore({host: ''localhost'', port: 6379,client: RedisClient,ttl : 260}),
saveUninitialized: false,
resave: false,
cookie: { secure: true }
}));
RedisClient.on(''error'', function(err) {
console.log(''Redis error: '' + err);
});
RedisClient.on("ready",function (err) {
console.log("Redis is ready" );
});
RedisClient.on("connect",function (err) {
console.log("Connected to redis");
});
RedisClient.on("reconnecting",function (err) {
console.log("Reconnecting to redis");
});
app.use(parser.json());
app.use(parser.urlencoded({extended: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next){
if(req.originalUrl.match(''/auth/user/signin'')) {
passport.session()(req, res, next)
}
else {
next(); // do not invoke passport
}
});