update tutorial sistema nodejs node instalar ejemplos node.js express passport.js passport-local

node.js - tutorial - ¿Cómo almacena el pasaporte js el objeto de usuario en sesión?



sistema node js (2)

Estoy usando node / express con pasaporte en mi desarrollo. Me encontré con un artículo que dice:

Express carga los datos de la sesión y los adjunta a la req. Como el pasaporte almacena el usuario serializado en la sesión, el objeto de usuario serializado se puede encontrar en req.session.passport.user.

Pero para mi sorpresa, el valor para las tiendas sessionID en las cookies del navegador sigue siendo el mismo antes y después de iniciar sesión. Entonces, ¿dónde se almacena el objeto de usuario serializado?

Pensé que inicialmente estaba almacenado en la cookie de usuario sessionid pero parece que este no es el caso, ya que todavía puedo acceder a mi objeto de usuario con req.session.passport.user


Entonces, ¿dónde se almacena el objeto de usuario serializado?

En breve

El objeto de usuario serializado se almacena en req.user por PassportJS tomado de req.session.passport.user (que se llena con Express ) con la ayuda del método deserializeUser de Passport''s .

Express agrega la identificación del objeto de sesión a una cookie en el navegador del usuario, que se envía de vuelta para expresarse en un encabezado en cada solicitud. Express luego toma el ID del encabezado y busca el almacén de la sesión (es decir, Mongo o lo que sea), encuentra la entrada y la carga en req.session .

PassportJS usa el contenido de req.session para realizar un seguimiento del usuario autenticado con la ayuda de los métodos serializeUser y deserializeUser (para obtener más información sobre el flujo de trabajo de serializeUser y deserializeUser vea mi respuesta en esta question SO).

Express es responsable de crear la sesión. ¿Cuándo se crean las sesiones? Es entonces cuando Express no detecta una cookie de sesión. Por lo tanto, el orden en el que organiza su session y las configuraciones de passport en su app o archivo server.js es muy importante. Si declara su configuración de session y passport encima de las configuraciones de static directory configs todas las solicitudes de static content también obtendrán una sesión, lo cual no es bueno.

Vea mi respuesta a esta question SO, donde mencioné el acceso al contenido estático y cómo aplicar el passport a ciertas rutas de forma selectiva, en lugar de hacerlo de forma predeterminada (es posible que no necesite autentificar todas las rutas, por lo que podría evitar session store lookup innecesarias en la session store lookup y la eliminación de-serialization adjuntando la sesión solo a las solicitudes que se asignan a las URLS seguras (ver más abajo).

//selectively applying passport to only secure urls app.use(function(req, res, next){ if(req.url.match(''/xxxx/secure'')) passport.session()(req, res, next) else next(); // do not invoke passport });

Hay un tutorial increíble que te recomiendo que leas si quieres entender el flujo de trabajo de PassportJS.


Puede ver el sessionID en la cookie como una clave para una base de datos donde se almacenan los datos de la sesión. Dependiendo del controlador de sesión que utilice con Express y la política de almacenamiento que utilice, los datos se almacenarán de diferentes maneras. Esto significa que el sessionID puede tener el mismo valor tanto antes del inicio de sesión, después de un inicio de sesión exitoso, e incluso después de que un usuario cierre la sesión.

Si utiliza express-session MemoryStore con MemoryStore los datos se guardarán en la memoria del proceso del nodo, indexados en el ID de sesión. Busque aquí la initialization de la tienda y aquí el storing de los datos.

Puede crear una tienda donde los datos se serializan a la cookie, pero ninguno de ellos aparece en la lista de las tiendas de sesión compatibles .