freeCodeCamp/curriculum/challenges/spanish/06-information-security-and.../advanced-node-and-express/authentication-with-socket....

3.6 KiB

id title challengeType videoUrl localeTitle
589fc831f9fc0f352b528e77 Authentication with Socket.IO 2 Autenticación con Socket.IO

Description

Como recordatorio, este proyecto se está construyendo sobre el siguiente proyecto de inicio en Glitch , o clonado desde GitHub . Actualmente, no puede determinar quién está conectado a su socket web. Mientras que 'req.user' almacena el objeto de usuario, eso es solo cuando su usuario interactúa con el servidor web y con los sockets web, no tiene ninguna solicitud (solicitud) y, por lo tanto, no tiene datos de usuario. Una forma de resolver el problema de saber quién está conectado a su socket web es analizando y decodificando la cookie que contiene la sesión de pasaporte y luego deserializándola para obtener el objeto de usuario. Afortunadamente, hay un paquete en NPM solo para esto que convierte una tarea compleja en algo simple.
Agregue 'passport.socketio' como una dependencia y solicítelo como 'passportSocketIo'. Ahora solo tenemos que decirle a Socket.IO que lo use y establezca las opciones. Asegúrese de que esto se agregue antes del código de socket existente y no en el escucha de conexión existente. Para su servidor debe verse como sigue:
 io.use (passportSocketIo.authorize ({
  cookieParser: cookieParser,
  clave: 'express.sid',
  secreto: process.env.SESSION_SECRET,
  tienda: sessionStore
})); 
Opcionalmente, también puede pasar "éxito" y "fallar" con una función a la que se llamará después de que se complete el proceso de autenticación cuando un cliente intente conectarse. Ahora se puede acceder al objeto de usuario en su objeto de socket como socket.request.user . Por ejemplo, ahora puede agregar lo siguiente: console.log('user ' + socket.request.user.name + ' connected'); y se registrará en la consola del servidor que se ha conectado! Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes revisar el proyecto hasta este punto aquí .

Instructions

Tests

tests:
  - text: passportSocketIo es una dependencia
    testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/package.json") .then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, "passport.socketio", "Your project should list "passport.socketio" as a dependency"); }, xhr => { throw new Error(xhr.statusText); })'
  - text: passportSocketIo se requiere correctamente
    testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js").then(data => { assert.match(data, /require\(([""])passport\.socketio\1\)/gi, "You should correctly require and instantiate "passport.socketio"");}, xhr => { throw new Error(xhr.statusText); })'
  - text: passportSocketIo está correctamente configurado
    testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js") .then(data => { assert.match(data, /io\.use\(.+\.authorize\(/gi, "You should register "passport.socketio" as socket.io middleware and provide it correct options"); }, xhr => { throw new Error(xhr.statusText); })'

Challenge Seed

Solution

// solution required