Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

202
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda