nest g gu auth/guards/jwt-auth --flat
Introducción
Cómo autenticar usuarios con NestJS
Instalación de PlatziStore con MongoDB
Instalación de PlatziStore con TypeORM
Protección con guardianes
Introducción a Guards
Usando un decorador
Guard con variables de ambiente
Autenticación con Passport
Hashing de contraseñas en TypeORM
Hashing de contraseñas en MongoDB
Autenticación con Passport.js
Ruta de login
Autenticación con JSON Web Tokens
Conectando Passport con JWT
Secret desde variables de entorno
Implementando JWT Guard
Extendiendo JWT Guard
Control de roles en NestJS
Obteniendo órdenes del perfil
Deployment
Configurando Mongo Atlas
Deploy de Mongo en Heroku
Configuración de PostgreSQL en Heroku
Deploy de Postgres en Heroku
Corriendo migraciones de Postgres en Heroku
Próximos pasos
¿Quieres más cursos de NestJS?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 6
Preguntas 2
nest g gu auth/guards/jwt-auth --flat
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?
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.