繁体   English   中英

NestJS - JWTModule 上下文依赖

[英]NestJS - JWTModule context dependency

运行我的应用程序后,我得到了这个...

[Nest] 5608   - 01.01.2021, 18:12:05   [ExceptionHandler] Nest can't resolve dependencies of the JwtService (?). Please make sure that the argument JWT_MODULE_OPTIONS at index [0] is available in the JwtModule context.

Potential solutions:
- If JWT_MODULE_OPTIONS is a provider, is it part of the current JwtModule?       
- If JWT_MODULE_OPTIONS is exported from a separate @Module, is that module imported within JwtModule?
  @Module({
    imports: [ /* the Module containing JWT_MODULE_OPTIONS */ ]
  })

有人可以告诉我我的代码有什么问题吗?

@Module({
    imports: [TypeOrmModule.forFeature([User]),
    JwtModule.register({
        secretOrPrivateKey: 'secret12356789'
    })
    ],
    providers: [UserService]
})
export class AuthModule { }

@Module({
  imports: [
    TypeOrmModule.forRoot({
      //
    }),
    AuthModule,
    UserModule,
    JwtModule
  ],
  controllers: [AppController, UserController, AuthController ],
  providers: [AppService, UserService, AuthService ],
})
export class AppModule {}

谢谢你的帮助 ////////////////////////////////////////////// ////////////////

在您的 AppModule 中, JwtModule AppModule但没有添加任何选项。 这就是导致问题的原因。 由于您已经在JwtModule中注册了AuthModule ,因此这可能不是您想要做的。

您至少在两个地方( AuthModuleAppModule )注册了UserService ,您可能打算将UserService添加到UserModuleexports中,然后将UserModule添加到需要UserService的模块的imports数组中。

TL;DR 请参阅,复制/粘贴示例。

最近有同样的问题。 正如 Nest.JS 建议的那样, JwtModule可以在授权模块中声明: https://docs.nestjs.com/security/authentication 而且,是的,它应该用它的所有设置声明一次。 主题消息可能来自多个声明(其中一些没有JWT_MODULE_OPTIONS )。 可以用一个准备好的工作示例来包装Jay 的响应。

所以 auth 模块应该如下所示:

//./authorization/authorization.module.ts

import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';

import { AuthorizationController } from './authorization.controller';
import { AuthorizationService } from './authorization.service';

@Module({
    imports: [
    ...
    JwtModule.register({
        secret: process.env.ACCESS_TOKEN_SECRET || 'SOME_SECURE_SECRET_jU^7',
        signOptions: {
            expiresIn: process.env.TOKEN_EXPIRATION_TIME || '24h',
        }
    }),
    ....
    ],
    controllers: [AuthorizationController],
    providers: [AuthorizationService],
    exports: [AuthorizationService, JwtModule]//<--here exports JwtModule
                                              //as a part of AuthorizationModule 
})

export class AuthorizationModule {};

然后您的AppModule将以这种方式从AuthorizationModule注入导出的JwtModule

//./app.module.js

import { Module } from '@nestjs/common';
import { AuthorizationModule } from './authorization/authorization.module';

@Module({
    imports: [
        ...
        AuthorizationModule, //<-- here injects the set up JwtModule
                             //NB! No additional injections required!
        ...
    ],
    ...
})

export class AppModule {};

希望,这会有所帮助。 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM