Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
Problemas con la autorización en NestJS usando jwt y pasaporte

Tengo una API de Ruby on Rails que se conectará a una API de nestjs que estoy creando desde cero. Crearé un token jwt en Rails y lo usaré como autorización, usando la misma firma en ambos proyectos. Por ahora, estoy probando solo a través del cartero llamando a la API de NestJS, pero devuelve "NO AUTORIZADO" en cada solicitud. Aquí hay un poco de mi código:

jwt.doctor.estrategia.ts

 import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { ExtractJwt, Strategy } from 'passport-jwt'; @Injectable({}) export class JwtDoctorStrategy extends PassportStrategy( Strategy, 'jwt.doctor', ) { constructor(config: ConfigService) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: config.get('JWT_DOCTOR_SECRET'), }); } validate(payload: any) { console.log({ payload, }); return payload; } }

PD: creé dos estrategias porque tengo diferentes firmas para diferentes casos. El otro es muy similar a este, pero por ahora solo probé el que proporcioné arriba.

doctor.controller.ts

 import { Controller, Get, UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; @Controller('doctors') export class DoctorController { @UseGuards(AuthGuard('jwt.doctor')) @Get('me') getMe() { return 'User info'; } }

¿Me estoy perdiendo de algo? Estoy creando el token jwt en la consola con fines de prueba, y se está validando correctamente en el sitio web de jwt. Agradecería mucho cualquier información (:

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Podemos pasar un objeto de opciones en la llamada a super() para personalizar el comportamiento de la estrategia de pasaporte. En este ejemplo, la estrategia de pasaporte local por defecto espera propiedades denominadas nombre de usuario y contraseña en el cuerpo de la solicitud. Pase un objeto de opciones para especificar diferentes nombres de propiedades, por ejemplo: super({ usernameField: 'email' })

 import { ExtractJwt, Strategy } from 'passport-jwt'; import { PassportStrategy } from '@nestjs/passport'; import { Injectable } from '@nestjs/common'; import { jwtConstants } from './constants'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor() { super({ usernameField: 'email' // your strategy here in super jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: jwtConstants.secret, }); } async validate(payload: any) { return { userId: payload.sub, email: payload.email }; } }

Además, suponiendo que sus otros módulos estén importando el AuthModule para tener acceso al AuthService, podría volver a exportar el PassportModule :

 const passportModule = PassportModule.register({ defaultStrategy: 'jwt' }); @Module({ imports: [ passportModule, JwtModule.register({ secretOrPrivateKey: 'secretKey', signOptions: { expiresIn: 3600, }, }), UsersModule, ], providers: [AuthService, JwtStrategy], exports: [passportModule] }) export class AuthModule {}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda