No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Extendiendo JWT Guard

14/22
Recursos

Aportes 6

Preguntas 2

Ordenar por:

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

nest g gu auth/guards/jwt-auth --flat

Asi quedo el guardian

import { ExecutionContext, HttpException, HttpStatus, Injectable, UnauthorizedException } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
    
    constructor( private reflector: Reflector ){
        super()
    }

    canActivate(context: ExecutionContext) {
        
        const isPublic = this.reflector.get('isPublic', context.getHandler())

        if( isPublic ) return true;

        return super.canActivate(context);
        
    }

    handleRequest(err, user, info) {
    
        if (err || !user) {
            
            throw new HttpException({
                status: HttpStatus.UNAUTHORIZED,
                error: 'Usuario no autorizado',
            }, HttpStatus.UNAUTHORIZED);

        }
        
        return user;

    }

}

👏

Para los que estén usando postman en lugar de insomnia les dejo un truco para que no tengan que estar añadiendo el token en cada petición a mano que es un poco lio y más cuando tienes tantos endpoints.

Primero creais un environment que en mi caso tiene url para no estar escribiendola y authorization para el token

Seguido vais a la pestaña de test en el endpoint de login y añadís el siguiente código que básicamente lo que hace es que cuando envies la petición de login coja el token y lo guarde en la variable de entorno.

let result = pm.response.json();

if (result && result.access_token){
    // nombre de la variable de entorno
    let authorization='authorization';    
    let token = result.access_token;
    pm.environment.set(authorization, token);
}
else{
    console.log('No se actualizo token')
}

Y para usar esta variable solo tiene que añadirla de la siguiente manera:

Esto te quita mucho trabajo puesto que cada vez que expire el token o tengas que hacer pruebas con diferentes usuarios con diferentes niveles de role no tengas que estar copiando y pegando el token solo haces login y se actualiza en todos.

Tuve el siguiente erorr:

ERROR [ExceptionsHandler] Unknown authentication strategy "jwt"

Logre solucionarlo de la siguiente manera
En la carpeta strategies modificar el archivo en la siguiente línea

export class LocalStrategy extends PassportStrategy(Strategy, 'jwt') {

En el JwtStragey existe alguna forma de acceder a los headers?