--- id: 589fc831f9fc0f352b528e77 title: Authentication with Socket.IO challengeType: 2 videoUrl: '' localeTitle: 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
```yml 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
```js // solution required ```