我正在尝试在AuthModule中加载"process.env.AUTH_SECRET",但它给了我一个未定义的错误"Error: secretOrPrivateKey必须有一个值"。
我在AppModule中设置了"isGlobal: true",它能够很好地读取"process.env.MONGO_URL"。
我还安装了dotenv,如果我执行以下操作,它也可以正常读取:
import * as dotenv from 'dotenv';
dotenv.config();
export const jwtConstants = {
secret: process.env.AUTH_SECRET,
};
但我更愿意按照"NestJs"的方式去做,因为文档中指出,添加isGlobal应该会使环境变量对所有其他模块可用。
auth.module.ts
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { UserModule } from '../user/user.module';
import { PassportModule } from '@nestjs/passport';
import { LocalStrategy } from './local.strategy';
import { JwtModule } from '@nestjs/jwt';
@Module({
imports: [
UserModule,
PassportModule,
JwtModule.register({
secret: process.env.AUTH_SECRET, //Cannot read this.
signOptions: { expiresIn: '60s' },
}),
],
providers: [AuthService, LocalStrategy],
exports: [AuthService, JwtModule],
})
export class AuthModule {}
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { MongooseModule } from '@nestjs/mongoose';
import { ConfigModule } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
UserModule,
MongooseModule.forRoot(process.env.MONGO_URL), // Can read this fine
AuthModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我错过了什么或者做错了什么?只是作为参考,我正在尝试遵循这个身份验证教程。
谢谢你,
JwtModule.registerAsync
而不是JwtModule.register
,以避免使用process.env.*
,就像https://docs.nestjs.com/techniques/http-module#async-configuration中所述。 - Micael Levi