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
来获取你的环境变量。
我正在尝试将环境变量传递到我的 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
来获取你的环境变量。