node.js - nodejs - redis store session
Cómo guardar y recuperar la sesión de Redis (2)
Estoy intentando integrar sesiones de Redis en mi sistema de autenticación escrito en Node.js.
Pude configurar con éxito Redis server, connect-redis
y Express server.
Aquí está mi configuración (solo el bit importante):
var express = require("express");
var RedisStore = require("connect-redis")(express);
var redis = require("redis").createClient();
app.use(express.cookieParser());
app.use(express.session({
secret: "thisismysecretkey",
store: new RedisStore({ host: ''localhost'', port: 6379, client: redis })
}));
Ahora ... ¿Cómo creo, leo y destruyo la sesión? He leído toneladas de artículos sobre cómo configurar connect-redis
y muchas preguntas aquí en SO, pero juro que cada uno se detiene solo en la configuración y no explica cómo usarlo realmente ...
Soy consciente de que eso es probablemente extremadamente simple, pero por favor no menosprecie y simplemente explique :).
Considera este código.
var express = require(''express'');
var redis = require("redis");
var session = require(''express-session'');
var redisStore = require(''connect-redis'')(session);
var bodyParser = require(''body-parser'');
var client = redis.createClient();
var app = express();
app.set(''views'', __dirname + ''/views'');
app.engine(''html'', require(''ejs'').renderFile);
app.use(session({
secret: ''ssshhhhh'',
// create new redis store.
store: new redisStore({ host: ''localhost'', port: 6379, client: client,ttl : 260}),
saveUninitialized: false,
resave: false
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.get(''/'',function(req,res){
// create new session object.
if(req.session.key) {
// if email key is sent redirect.
res.redirect(''/admin'');
} else {
// else go to home page.
res.render(''index.html'');
}
});
app.post(''/login'',function(req,res){
// when user login set the key to redis.
req.session.key=req.body.email;
res.end(''done'');
});
app.get(''/logout'',function(req,res){
req.session.destroy(function(err){
if(err){
console.log(err);
} else {
res.redirect(''/'');
}
});
});
app.listen(3000,function(){
console.log("App Started on PORT 3000");
});
Por lo tanto, debe instalar connect-redis y pasarle su instancia de sesión exprés .
Luego, en el middleware inicialice redisStore con detalles del servidor como este.
app.use(session({
secret: ''ssshhhhh'',
// create new redis store.
store: new redisStore({ host: ''localhost'', port: 6379, client: client,ttl : 260}),
saveUninitialized: false,
resave: false
}));
Puse ttl en 260, puedes aumentar. Después de que TTL llegue a sus límites, eliminará automáticamente la tecla de redis.
En los enrutadores, puede usar la variable req.session para ESTABLECER, EDITAR o DESTRUIR la sesión.
Una cosa más...
Si desea una cookie personalizada, es decir, no es lo mismo que en su tienda Redis, puede usar el analizador de cookies para establecer secretos de cookies.
Espero eso ayude.
enlace: https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/
Eso debería ser todo lo que hay para eso. Usted accede a la sesión en sus manejadores de ruta a través de una req.session
. Las sesiones se crean, guardan y destruyen automáticamente.
Si necesita crear manualmente una nueva sesión para un usuario, llame a req.session.regenerate()
.
Si necesita guardarlo manualmente, puede llamar a req.session.save()
.
Si necesita destruirlo manualmente, puede llamar a req.session.destroy()
.
Consulte la documentación de Connect para obtener la lista completa de métodos y propiedades.