Паспорт JwtStrategy никогда не выполнялся в Nestjs - PullRequest
0 голосов
/ 20 апреля 2019

Я использую nestjs и у меня проблема с использованием охраны для аутентификации запроса. Моя JwtStrategy никогда не выполняется.

Вот моя JwtStrategy:

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
  constructor(
    @Inject('IQueryBusAdapter')
    private readonly queryBus: IQueryBusAdapter,
  ) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.JWT_SECRET_KEY,
    });
  }

  validate = async (payload: IJwtPayload) => {
    Logger.log('INNNNN');

    const query = new GetUserByIdQuery();
    query.id = payload.id;

    const user = await this.queryBus.execute(query);
    if (!(user instanceof User)) {
      throw new UnauthorizedException();
    }

    return user;
  };
}

Я также пытаюсь вызвать напрямую validate() прямо в конструкторе, но ничего не меняется ...

Мой AuthModule:

@Module({
  imports: [
    BusModule,
    JwtModule.register({
      secretOrPrivateKey: process.env.JWT_SECRET_KEY,
      signOptions: {
        expiresIn: process.env.JWT_EXPIRES,
      },
    }),
    PassportModule.register({ defaultStrategy: 'jwt' }),
    TypeOrmModule.forFeature([User]),
  ],
  controllers: [RegisterAction, LoginAction],
  providers: [
    JwtStrategy,
  ],
})
export class AuthModule {}

Мой контроллер

@Get('/:id')
  @ApiOperation({ title: 'Get user ressource' })
  @UseGuards(AuthGuard('jwt'))
  async index(@Param() query: GetUserByIdQuery): Promise<object> {
    const user = await this.queryBus.execute(query);

    if (!(user instanceof User)) {
      throw new NotFoundException();
    }

    return {
      id: user.id,
      fullName: user.getFullName(),
      email: user.email
    };
  }

Я всегда получал 401 код состояния.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 апреля 2019

validate будет вызываться только тогда, когда вы передадите действительный токен jwt. Когда токен подписан с другим секретом или срок его действия истек, validate никогда не будет вызван. Убедитесь, что у вас есть действительный токен. Вы можете проверить свой токен с помощью отладчика jwt .

...