nest.js 中的环境变量在 jwt.strategy.ts 中不可见

Environment variable in nest.js is not visible in jwt.strategy.ts

我正在尝试将环境变量传递到我的 jwt.stratgy.ts 文件,但变量在文件中不可见。如果我在 SecurityParameters 文件中对 jwksUri 变量进行硬编码,它就可以正常工作。出于某种原因,似乎 process.env 在 super(options) 甚至在 constructor( ) 中都不可见。非常感谢有关如何读取变量的任何指示。

我的 jwt.strategy.ts 如下所示:

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'],
    });
  }

  
}

我的 SecurityParameters 文件如下所示:

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


我正在从 .env 文件加载环境文件并在 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();

我的app.module.ts如下所示


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 };

As I just mentioned in your other question 你应该注入 ConfigService 并使用 configService.get() 而不是 process.env 来获取你的环境变量。