为什么我在NestJS中得到JWTStrategy需要秘密或密钥?

问题描述 投票:0回答:1

我正在为我的NestJS项目实现验证。我严格按照NestJS文档和 这个 但当我试图启动API时,我仍然得到一个错误。我似乎不知道是什么原因造成的。我试着设置了 secretOrKey 到硬编码字符串,但没有效果,然后我把它移到一个 .env 还是不行。

下面是我的模块代码和JwtStrategy文件。

// AuthModule
@Module({
  imports: [
    ConfigModule.forRoot(),
    UserModule,
    PassportModule.register({ defaultStrategy: 'jwt' }),
    TypeOrmModule.forFeature([Registration]),
    JwtModule.register({
      secretOrPrivateKey: process.env.JWT_SECRET_KEY,
      signOptions: { expiresIn: process.env.JWT_EXPIRES }
    }),
  ],
  controllers: [AuthController],
  providers: [AuthService, LocalStrategy, JwtStrategy],
  exports: [AuthService, LocalStrategy, JwtStrategy]
})
export class AuthModule {}
// JWTStrategy
import { Injectable, UnauthorizedException } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy, ExtractJwt } from "passport-jwt";
import { AuthService } from "./auth.service";

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      passReqToCallback: true,
      secretOrKey: 'test'
    })
  }

  async validate(payload: any, done: Function) {
    const user = await this.authService.validateUserToken(payload)
    if (!user) {
      return done(new UnauthorizedException(), false)
    }

    done(null, user)
  }
}

这是我在终端得到的错误信息

[Nest] 6876   - 05/11/2020, 10:54:31 PM   [NestFactory] Starting Nest application...
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] AppModule dependencies initialized +76ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] TypeOrmModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] PassportModule dependencies initialized +1ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] PassportModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] JwtModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] ConfigHostModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] ConfigModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] TypeOrmCoreModule dependencies initialized +121ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] TypeOrmModule dependencies initialized +1ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [InstanceLoader] TypeOrmModule dependencies initialized +0ms
[Nest] 6876   - 05/11/2020, 10:54:31 PM   [ExceptionHandler] JwtStrategy requires a secret or key +20ms
TypeError: JwtStrategy requires a secret or key
    at new JwtStrategy (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/passport-jwt/lib/strategy.js:45:15)
    at new MixinStrategy (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:31:13)
    at new LocalStrategy (/Users/user/Documents/code/sideline/hyperspotters-api/dist/src/auth/local.strategy.js:18:9)
    at Injector.instantiateClass (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/core/injector/injector.js:289:19)
    at callback (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/core/injector/injector.js:76:41)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Injector.resolveConstructorParams (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/core/injector/injector.js:117:24)
    at async Injector.loadInstance (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/core/injector/injector.js:80:9)
    at async Injector.loadProvider (/Users/user/Documents/code/sideline/hyperspotters-api/node_modules/@nestjs/core/injector/injector.js:37:9)
    at async Promise.all (index 4)
✨  Done in 11.99s.
authentication passport.js nestjs passport-jwt
1个回答
0
投票

我想明白了问题所在,在我的local.strategy.ts文件中,没有从passport-local导入Strategy类,而是从passport-jwt导入。

© www.soinside.com 2019 - 2024. All rights reserved.