Search code examples
jwtnestjspassport.js

how can i access my env file from a nestjs module using passport js?


I am working on a small api using nestjs and passeport js

I have been trying to access the content of my env file, from within my auth module...but it's surpinsigly challenging...

import { userService } from 'src/user/services/user.service';
import { AuthService } from './auth.service';
import { PassportModule } from '@nestjs/passport';
import { LocalStrategy } from './local.strategy';
import { JwtModule } from '@nestjs/jwt';
import { JwtStrategy } from './jwt.strategy';
import { ConfigService } from '@nestjs/config';

@Module({
  providers: [AuthService, userService, LocalStrategy, JwtStrategy],
  imports: [
    TypeOrmModule.forFeature([UserEntity, SpotEntity, SpotUserEntity]),
    UserModule,
    PassportModule,
    JwtModule.register({
      secret: ConfigService.get('JWT_SECRET'),
      signOptions: { expiresIn: '600s' },
    }),
  ],
  exports: [AuthService],
})
export class AuthModule {}

Off course this cannot work because i am trying to utilize ConfigService.get() instead of this.configService.get() I know i would need to instanciate configService in a constructor first, but modules do not have constructors, this is where i'm stuck at.


Solution

  • You can try registerAsync i.e

    import { ConfigModule, ConfigService } from '@nestjs/config';
    
    
    ......
     imports: [
        PassportModule.register({
          defaultStrategy: 'jwt',
        }),
        JwtModule.registerAsync({
          imports: [ConfigModule],
          useFactory: (config: ConfigService) => {
            return {
              signOptions: {
                expiresIn: config.get<string>('JWT_EXPIRY'),
              },
              secret: config.get<string>('JWT_SECRET'),
            };
          },
          inject: [ConfigService],
        })
      ]
    ....