Как получить конфигурации из импорта модуля в NestJS? - PullRequest
0 голосов
/ 22 января 2019

Допустим, мой модуль определен так:

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt' }),
    JwtModule.register({
      // Use ConfigService here
      secretOrPrivateKey: 'secretKey',
      signOptions: {
        expiresIn: 3600,
      },
    }),
    PrismaModule,
  ],
  providers: [AuthResolver, AuthService, JwtStrategy],
})
export class AuthModule {}

Теперь, как мне получить secretKey из ConfigService здесь?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Или есть другое решение, создайте класс JwtStrategy, что-то вроде этого:

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
    constructor(private readonly authService: AuthService) {
        super({
            jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
            secretOrKey: config.session.secret,
            issuer: config.uuid,
            audience: config.session.domain
        });
    }

    async validate(payload: JwtPayload) {
        const user = await this.authService.validateUser(payload);
        if (!user) {
            throw new UnauthorizedException();
        }
        return user;
    }
}

Там вы можете передать ConfigService в качестве параметра конструктору, но я использую config простоиз простого файла.

Тогда не забудьте поместить его в массив провайдеров в модуле.

С уважением.

0 голосов
/ 22 января 2019

Вы должны использовать registerAsync, чтобы вы могли ввести свой ConfigService.С его помощью вы можете импортировать модули, внедрить поставщиков и затем использовать этих поставщиков в заводской функции, которая возвращает объект конфигурации:

JwtModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    secretOrPrivateKey: configService.getString('SECRET_KEY'),
    signOptions: {
        expiresIn: 3600,
    },
  }),
  inject: [ConfigService],
}),

Для получения дополнительной информации см. Документы async options .

...