he hecho esto, pero sí requiere hacer sus propias horquillas de cosas
En primer lugar usted necesita para hacer la clave de sesión del mismo nombre. Ese es el trabajo más fácil.
A continuación, creé una horquilla de la gema redis-store y la modifiqué donde estaba la clasificación. Necesito hablar con json en ambos lados porque encontrar un módulo de estilo Rubis para javascript no es fácil. The file where I alter marshalling
También tuve que reemplazar la porción de middleware de sesión de connect. El hash que se crea es muy específico y no coincide con el que crea el riel. Tendré que dejarte esto para que hagas ejercicio porque podría haber una manera más agradable. Podría haber bifurcado conectar pero en su lugar extraje una copia de conexión> middleware> sesión y requirió la mía.
Notarás cómo el original agrega una variable base que no está presente en la versión de rieles. Además, debe manejar el caso cuando los rieles han creado una sesión en lugar de un nodo, eso es lo que hace la función generateCookie.
/***** ORIGINAL *****/
// session hashing function
store.hash = function(req, base) {
return crypto
.createHmac('sha256', secret)
.update(base + fingerprint(req))
.digest('base64')
.replace(/=*$/, '');
};
// generates the new session
store.generate = function(req){
var base = utils.uid(24);
var sessionID = base + '.' + store.hash(req, base);
req.sessionID = sessionID;
req.session = new Session(req);
req.session.cookie = new Cookie(cookie);
};
/***** MODIFIED *****/
// session hashing function
store.hash = function(req, base) {
return crypto
.createHmac('sha1', secret)
.update(base)
.digest('base64')
.replace(/=*$/, '');
};
// generates the new session
store.generate = function(req){
var base = utils.uid(24);
var sessionID = store.hash(req, base);
req.sessionID = sessionID;
req.session = new Session(req);
req.session.cookie = new Cookie(cookie);
};
// generate a new cookie for a pre-existing session from rails without session.cookie
// it must not be a Cookie object (it breaks the merging of cookies)
store.generateCookie = function(sess){
newBlankCookie = new Cookie(cookie);
sess.cookie = newBlankCookie.toJSON();
};
//... at the end of the session.js file
// populate req.session
} else {
if ('undefined' == typeof sess.cookie) store.generateCookie(sess);
store.createSession(req, sess);
next();
}
Espero que esto funcione para usted. Me costó bastante buscarlos para hacerles hablar de la misma manera.
Encontré un problema también con los mensajes flash que se almacenan en json. Espero que no encuentres ese. Los mensajes flash tienen una estructura de objeto especial que se va volando cuando se serializa. Cuando se restaura el mensaje flash de la sesión, es posible que no tenga un objeto flash adecuado. Necesitaba parchar para esto también.
Rails/ruby a veces usa referencias para serializar objetos. Si es así, no sería capaz de recuperarlos fácilmente en el nodo ... – sailor
@sailor si eso sucede, puedo guardar JSON :) –