No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Conectando Passport con JWT

11/22
Recursos

Aportes 7

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Algo a tener en cuenta es que Nico menciona varias veces que el token est谩 鈥渆ncriptado鈥 y en realidad los JWT est谩n codificados pero no encriptados por eso no es recomendable colocar informaci贸n sensible ah铆 ya que cualquiera puede ver su contenido

npm install --save @nestjs/jwt passport-jwt
npm install --save-dev @types/passport-jwt

Para MongoDB viene desde la base de datos misma _id por tanto para que obtengamos el sub correctamente debemos colocarlo tal como viene de la base de datos.

generateJWT(user: User) {
    const payload: PayloadToken = { role: user.role, sub: user._id };
    return {
      access_token: this.jwtService.sign(payload),
      user,
    };
  }

Para quitar __v y reemplazar _id por id

@Schema()
class User extends Document {
  @Prop({ required: true, unique: true })
  email: string;

  @Prop({ required: true })
  password: string;

  @Prop({ required: true })
  role: string;
}

const UserSchema = SchemaFactory.createForClass(User);

UserSchema.method('toJSON', function () {
  const { __v, _id, password, ...object } = this.toObject();
  object.id = _id;
  return object;
});

export { User, UserSchema };

Para verificar los JWT token generados, pueden utilizar esta herramienta: https://jwt.io

No olviden cambiar el Http code: 200 OK

auth.controller.ts

import { Controller, Post, Req, UseGuards, HttpCode } from '@nestjs/common';
import { Request } from 'express';
import { AuthGuard } from '@nestjs/passport';

@Controller('/auth')
export class AuthController {
  @UseGuards(AuthGuard('local'))
  @Post('/login')
  @HttpCode(200)
  login(@Req() req: Request) {
    return req.user;
  }
}

馃憦