PS :我测试了这些:Error: secretOrPrivateKey must have a value
我有在另一个项目中工作的这些代码,我将它们完全复制-粘贴到另一个具有相同依赖关系版本的新项目中,它显示了这个错误。当我像这样调用符号函数时,会发生错误:
await this._jwtTokenService.signAsync(user),在构造函数中注入_jwtTokenService,如下所示:
constructor(
private _jwtTokenService: JwtService,
) {}我以前看到过这个错误,但修复方法是在jwtModule.register函数中注入“秘密”,如下所示:
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => {
return {
secret: 'secret',
};
},
inject: [ConfigService],
}), `但是现在不行了,除非我对符号函数这样做
await this._jwtTokenService.signAsync(user, {secret : 'secret'}),当我打印_jwtTokenService以查看它所继承的值时,我看到它有空的options对象:
JwtService {
options: {},
logger: Logger { context: 'JwtService', options: {} }
}例如,我尝试将其传递到寄存器函数中:
signOptions: { expiresIn: '30 days' },它仍然有空的对象。我在这里做错什么了吗?
"dependencies": {
"@nestjs/common": "^8.0.0",
"@nestjs/config": "^2.2.0",
"@nestjs/core": "^8.0.0",
"@nestjs/jwt": "^9.0.0",
"@nestjs/mapped-types": "*",
"@nestjs/microservices": "^9.1.4",
"@nestjs/mongoose": "^9.2.0",
"@nestjs/passport": "^9.0.0",
"@nestjs/platform-express": "^8.0.0",
"@nestjs/swagger": "^6.1.2",
"@types/passport-jwt": "^3.0.6",
"bcrypt": "^5.1.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"express-session": "^1.17.3",
"mongoose": "^6.6.5",
"passport": "^0.6.0",
"passport-jwt": "^4.0.0",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^7.2.0"
},auth.module.ts
@Module({
imports: [
UsersModule,
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secret: 'secret', //to add .env
secretOrPrivateKey: 'secret',
signOptions: { expiresIn: '30 days' },
}),
],
providers: [AuthService, SessionSerializer, JwtService],
exports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
AuthService,
PassportModule,
JwtModule,
],
})
export class AuthModule {}在auth.services.ts中:
async loginWithCredentials(user: UserDto) {
const userEntity: UserDto = await this.validateUser(
user.username,
user.password,
);
const token = await this.createToken(userEntity);
return new LoginPayloadDto(token);
}
async createToken(user: UserDto): Promise<TokenDto> {
console.log(user);
return new TokenDto({
expiresIn: 30,
accessToken: await this._jwtTokenService.signAsync(user),
});
}我在应用程序控制器中使用了auth服务:
@Post('login')
async loginHttp(@Body() user: UserDto) {
return this.authService.loginWithCredentials(user);
}app.module:
@Module({
imports: [
ConfigModule.forRoot({
load: configs,
isGlobal: true,
cache: true,
envFilePath: ['.env'],
expandVariables: true,
}),
MongooseModule.forRoot(`mongodb://localhost:27017/admin`),
UsersModule,
AuthModule,
],
controllers: [AppController],
providers: [AppService],
exports: [],
})
export class AppModule {}ps :即使我把配置放在app模块中,它也不起作用。
我得到的错误:
[Nest] 84469 - 10/10/2022, 5:21:48 PM ERROR [ExceptionsHandler] secretOrPrivateKey must have a value
Error: secretOrPrivateKey must have a value
at Object.module.exports [as sign] (/media/work/alternatives-matomo/in-auth/node_modules/jsonwebtoken/sign.js:107:20)
at /media/work/alternatives-matomo/in-auth/node_modules/@nestjs/jwt/dist/jwt.service.js:33:53
at new Promise (<anonymous>)
at JwtService.signAsync (/media/work/alternatives-matomo/in-auth/node_modules/@nestjs/jwt/dist/jwt.service.js:33:16)
at AuthService.createToken (/media/work/alternatives-matomo/in-auth/src/auth/auth.service.ts:56:48)
at AuthService.loginWithCredentials (/media/work/alternatives-matomo/in-auth/src/auth/auth.service.ts:47:30)
at /media/work/alternatives-matomo/in-auth/node_modules/@nestjs/core/router/router-execution-context.js:46:28
at /media/work/alternatives-matomo/in-auth/node_modules/@nestjs/core/router/router-proxy.js:9:17发布于 2022-10-10 16:42:18
将JwtService从auth.module提供程序列表中删除,修复了它
@Module({
imports: [
UsersModule,
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secret: 'secret', //to add .env
secretOrPrivateKey: 'secret',
signOptions: { expiresIn: '30 days' },
}),
],
providers: [AuthService, SessionSerializer],
exports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
AuthService,
PassportModule,
JwtModule,
],
})
export class AuthModule {}https://stackoverflow.com/questions/74017744
复制相似问题