node.js - Får feilen 'secretOrPrivateKey må ha en verdi' i NestJS JWT-autentisering


Jeg støter på en feil i min NestJS-applikasjon når jeg bruker JWT-autentisering med @nestjs/jwt-pakken. Feilmeldingen jeg mottar er "secretOrPrivateKey must have a value." Jeg har fulgt den offisielle dokumentasjonen og sørget for å konfigurere JwtModule med hemmelig nøkkel, men feilen vedvarer.

Her er den relevante koden i applikasjonen min:

// auth.module.ts:
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { EmailService } from 'src/email/email.service';
import { UserService } from 'src/user/user.service';
import { JwtModule, JwtService } from '@nestjs/jwt';
import { jwtConstants } from './constants';

@Module({
  imports: [
    JwtModule.register({
      global: true,
      secret: jwtConstants.secret,
      secretOrPrivateKey: jwtConstants.secret,
      signOptions: { expiresIn: '60s' },
    })
  ],
  providers: [AuthService, UserService, JwtService, EmailService],
  controllers: [AuthController]
})
export class AuthModule {}

// constants.ts:
export const jwtConstants = {
    secret: process.env.JWT_SECRET
}


//auth.service.ts:
import { ForbiddenException, Injectable } from '@nestjs/common'
import { PrismaService } from 'src/prisma/prisma.service'
import { CheckNewPasswordCode, RquestNewPasswordDto, SignInDto, SignUpDto, UpdatePasswordDto, UpdatePrivilegesDto } from './dto'
import { UserService } from 'src/user/user.service'
import { JwtService } from '@nestjs/jwt'

@Injectable()
export class AuthService {
    constructor(private userService: UserService,
        private jwtService: JwtService) { }

    async signUp(dto: SignUpDto) {
        const user = await this.userService.signUp(dto)
        const payload = { sub: user.email, username: user.name }

        return {
            access_token: await this.jwtService.signAsync(payload),
        }
    }

    async signIn(dto: SignInDto) {
        const user = await this.userService.signIn(dto)
        const payload = { sub: user.email, username: user.name }

        return {
            access_token: await this.jwtService.signAsync(payload),
        }
    }
}

Jeg har også sjekket følgende punkter:

Jeg bekreftet at miljøvariabelen JWT_SECRET er korrekt satt og tilgjengelig i applikasjonen min. Jeg skrev til og med ut verdien i AuthModule for å verifisere at den ble hentet.

Jeg har installert jsonwebtoken-pakken som en avhengighet i prosjektet mitt.

Til tross for disse forsøkene, støter jeg fortsatt på den samme feilen. Kan noen vennligst hjelpe meg med å identifisere hva som kan forårsake dette problemet og gi veiledning om hvordan det kan løses? Alle forslag eller innsikter vil bli høyt verdsatt.

Vennligst gi meg beskjed hvis ytterligere informasjon er nødvendig. Takk!

Svar #1

// I've changed my providers in auth.module.ts from this
providers: [AuthService, UserService, EmailService, JwtService]
// to this
providers: [AuthService, UserService, EmailService]

Svar #2

Det er feil i den offisielle dokumentasjonen. endre her:

return {
    //access_token: await this.jwtService.signAsync(payload),
    access_token: await this.jwtService.signAsync(payload, { secret: your.secret }),//
}

Relaterte artikler