Estoy usando algunos de los repositorios de muestra de NestJS 19-auth-jwt para implementar un sistema de autenticación. Pero me enfrento a un error.
En el proveedor del módulo de autenticación (auth.services.ts), el método validateUser() usa la sintaxis JS ES6 para eliminar la contraseña del usuario antes de devolverla, como se explica en los documentos .
async validateUser(username: string, pass: string): Promise<any> { const user = await this.usersService.findOne(username); if (user && user.password === pass) { const { password, ...result } = user; return result; } return null; } Esto no funciona para mí, el result se ve así:
{ '$__': InternalCache { activePaths: StateMachine { paths: [Object], states: [Object], stateNames: [Array] }, skipId: true, strictMode: true, selected: {}, fields: {}, exclude: null }, '$isNew': false, _doc: { _id: new ObjectId("6299077a1c8989d6bdc3cb34"), first_name: 'Test', email: 'test@test.com', password: '$2b$10$/ndkmG7qLh8RReko7TvsPOC15xd.mVDUY9mC3SVbkVndgZlVDzU4.', __v: 0 } } No solo no eliminó la contraseña, sino que también está creando una estructura de datos extraña, lo que significa que no puedo obtener los datos del usuario que luego necesito pasar en mi JWT sin cambiar el código para acceder al _doc .
Si solo devuelvo user , funciona (pero obviamente no elimina la contraseña).
Mis preguntas son:
Estoy usando MongoDB y mongoose, como puede ver. Soy nuevo en Nest por cierto.
Referencia a la línea de código donde sucede esto .
¡Gracias!
EDITAR:
El método findOne en el proveedor de usuarios se ve así; una simple consulta de mangosta.
async findOneByEmail(email: string): Promise<User | undefined> { return await this.userModel.findOne({ email: email }).exec(); }