nestjs process.env.variable 在我的 auth.module.ts 中未定义
nestjs process.env.variable is undefined in my auth.module.ts
我正在尝试在 nestjs 中测试 jwt 身份验证。
当我调用 jwtService.sign() 时;
它显示错误 secretOrPrivateKey 必须有一个值 - {}
秘密未定义。
但在 AuthController 中,porcess.env.JWT_SECRET_KEY 有效。
我不知道为什么它不起作用。
我该如何解决?
auth.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [AppConfig, MySqlConfig, OracleConfig],
envFilePath: `${process.env.NODE_ENV}` == '' ? '.env.dev' : `.env.${process.env.NODE_ENV}`,
validationSchema: Joi.object({
NODE_ENV: Joi.string()
.valid('dev', 'stg', 'prd'),
}),
}),
AuthModule,
],
controllers: [AppController],
providers: [AppService, Logger],
})
export class AppModule {}
app.module.ts
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '1d' },
}),
],
controllers: [AuthController],
providers: [AuthService, JwtStrategy, LocalStrategy],
exports: [AuthService],
})
export class AuthModule {}
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
bufferLogs: true,
});
app.enableShutdownHooks();
app.useLogger(app.get(MyLogger));
const configService = app.get(ConfigService);
const logger = app.get(MyLogger);
const config = new DocumentBuilder()
.setTitle('nestjs-tst-boilerplate')
.setDescription('The nestjs-tst-boilerplate API description')
.setVersion('0.0.1')
.addTag('tag')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(configService.get<number>('app.port'));
logger.log(`Application running on [${configService.get<string>('app.env')}] enviroment. ${await app.getUrl()}`);
}
bootstrap();
在读取 process.env.JWT_SECRET_KEY
时,.env 可能尚未解析。因此,如果您正在使用像 @nestjs/config
这样的模块,请不要依赖 process.env.
。请改用 JwtModule.register
的异步版本并注入 ConfigService
。参见:https://github.com/nestjs/jwt/blob/master/README.md#async-options
我正在尝试在 nestjs 中测试 jwt 身份验证。
当我调用 jwtService.sign() 时; 它显示错误 secretOrPrivateKey 必须有一个值 - {} 秘密未定义。
但在 AuthController 中,porcess.env.JWT_SECRET_KEY 有效。
我不知道为什么它不起作用。
我该如何解决?
auth.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [AppConfig, MySqlConfig, OracleConfig],
envFilePath: `${process.env.NODE_ENV}` == '' ? '.env.dev' : `.env.${process.env.NODE_ENV}`,
validationSchema: Joi.object({
NODE_ENV: Joi.string()
.valid('dev', 'stg', 'prd'),
}),
}),
AuthModule,
],
controllers: [AppController],
providers: [AppService, Logger],
})
export class AppModule {}
app.module.ts
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '1d' },
}),
],
controllers: [AuthController],
providers: [AuthService, JwtStrategy, LocalStrategy],
exports: [AuthService],
})
export class AuthModule {}
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
bufferLogs: true,
});
app.enableShutdownHooks();
app.useLogger(app.get(MyLogger));
const configService = app.get(ConfigService);
const logger = app.get(MyLogger);
const config = new DocumentBuilder()
.setTitle('nestjs-tst-boilerplate')
.setDescription('The nestjs-tst-boilerplate API description')
.setVersion('0.0.1')
.addTag('tag')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(configService.get<number>('app.port'));
logger.log(`Application running on [${configService.get<string>('app.env')}] enviroment. ${await app.getUrl()}`);
}
bootstrap();
在读取 process.env.JWT_SECRET_KEY
时,.env 可能尚未解析。因此,如果您正在使用像 @nestjs/config
这样的模块,请不要依赖 process.env.
。请改用 JwtModule.register
的异步版本并注入 ConfigService
。参见:https://github.com/nestjs/jwt/blob/master/README.md#async-options