Próbuję przekazać zmienną środowiskową do mojego pliku jwt.stratgy.ts, ale zmienna nie jest widoczna w pliku. Działa dobrze, jeśli ciężko podkładam zmienną Jwksuri w pliku SecurityParameters. Z jakiegoś powodu wydaje się, że proces.ENV nie jest widoczny w super (opcjach) lub nawet w konstruktorze (). Doceniłoby jakiekolwiek wskazówki, jak czytać zmienną.

Mój jwt.stratyty.ts wygląda poniżej:

import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { passportJwtSecret } from 'jwks-rsa';
import { SecurityParameters } from '../auth.parameters' ;
import { ConfigService } from  '@nestjs/config' ;

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(  configService: ConfigService ) 

  {
    super({
      secretOrKeyProvider: passportJwtSecret({
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
        jwksUri: configService.get<string>('jwksUri'),
      }),
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      audience: SecurityParameters.audience ,
      issuer: SecurityParameters.issuer,
      ignoreExpiration: false,
      algorithms: ['RS256'],
    });
  }

  
}

Mój plik Securityparameters wygląda poniżej:

export const SecurityParameters = {
        issuer : process.env.ISSUER ,
        secret: process.env.SECRET ,
        expiresin: process.env.EXPIRESIN,
        jwksUri: process.env.JWKSURI,
        
   };


Ładuję plik środowiskowy z pliku .ENV i załadowanych zmiennych środowiskowych w Main.ts

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';



async function bootstrap() {

  const app = await NestFactory.create(AppModule);

  await app.listen(port, () => {
    console.log(`Listening on port ${port}`);
  });
}


dotenv.config();

bootstrap();

Moja app.module.ts wygląda poniżej


import { Module } from '@nestjs/common';
import { UserModule } from './user/user.module';
import { ConfigModule } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
import { config } from './auth/config';

let environment = process.env.NODE_ENV || 'local' ;
var module_names: Array<any> = [
  AuthModule
]

if (environment=='local') {
  module_names.push(ConfigModule.forRoot( {
    isGlobal: true,
    load: [config],
   }))
}

@Module({
  imports: 
    module_names,
    controllers: [],
    providers: [],
})

export class AppModule {}

Config.ts

const config = (): any => {
    return {
        issuer : process.env.ISSUER ,
        secret: process.env.SECRET ,
        expiresin: process.env.EXPIRESIN,
        jwksUri: process.env.JWKSURI,
       
    };
 };
 
 export { config };
0
user11380842 16 kwiecień 2021, 20:25

1 odpowiedź

Najlepsza odpowiedź

Jak już wspomniałem w innym pytaniu powinieneś należy wstrzykiwać ConfigService i za pomocą configService.get() zamiast process.env, aby uzyskać zmienne środowiskowe.

0
Jay McDoniel 16 kwiecień 2021, 17:52