我正在为我的NestJS项目实施身份验证。我严格遵守NestJS文档和this,但是在尝试启动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.
答案 0 :(得分:0)
我在我的local.strategy.ts文件中发现了问题,而不是从它从passport-jwt导入的本机护照中导入策略类。