ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT with nestJS
    Project using Nest.js/E-commerce App 2021. 9. 2. 14:21

    app.module.ts

      app.module.ts에 있는 @Module({})에 JwtModule.forRoot({})를 추가한다. 인자로는 privateKey 값을 준다. process.env.PRIVATE_KEY는 랜덤한 key 값이다.

    jwt.module.ts

    import { DynamicModule, Global, Module } from '@nestjs/common';
    import { CONFIG_OPTIONS } from 'src/common/common.constants';
    import { JwtModuleOptions } from './jwt.interfaces';
    import { JwtService } from './jwt.service';
    
    @Module({})
    @Global()
    export class JwtModule {
      static forRoot(options: JwtModuleOptions): DynamicModule {
        return {
          module: JwtModule,
          providers: [
            {
              provide: CONFIG_OPTIONS,
              useValue: options,
            },
            JwtService,
          ],
          exports: [JwtService],
        };
      }
    }
    • JwtModule에 forRoot() method를 생성한다. forRoot()는 DynamicModule이다. 그러므로 반환 값으로 DynamicModule을 type으로 준다. return 값은 기존에 @Module({})에 정의된 imports, providers, exports 등을 줄 수 있다.
    • module은 자신의 이름을 준다. (JwtModule)
    • providers는 배열 값을 줘야 하는데, JwtService가 사용할 값을 준다. 이 때 object로 provide와 userValue가 있다. provide는 JwtService가 사용할 key 값이고 useValue는 provide가 준 CONFIG_OPTIONS의 value 값이다.
    • 다른 module, which a example for UserModule, 이 사용할 수 있도록 exports에 추가한다.
    • JwtService를 어디에서든지(User Module이든) 사용하기 위해서 @Global()을 추가한다.

    jwt.service.ts

    import { Inject, Injectable } from '@nestjs/common';
    import * as jwt from 'jsonwebtoken';
    import { CONFIG_OPTIONS } from 'src/common/common.constants';
    import { JwtModuleOptions } from './jwt.interfaces';
    
    @Injectable()
    export class JwtService {
      constructor(
        @Inject(CONFIG_OPTIONS) private readonly options: JwtModuleOptions,
      ) {}
    
      sign(userId: number): string {
        return jwt.sign({ id: userId }, this.options.privateKey);
      }
    
      verify(token: string) {
        return jwt.verify(token, this.options.privateKey);
      }
    }

    JwtModule에서 providers에 준 CONFIG_OPTIONS으로 options 값을 사용할 수 있다.

    참고 자료

    'Project using Nest.js > E-commerce App' 카테고리의 다른 글

    nestJS password security  (0) 2021.09.03
    nest.js authGuard and authUser decorator  (0) 2021.09.02
    login API on nestJS using graphql  (0) 2021.09.02
    nestJS entity  (0) 2021.09.02
    Connect DB which is postgresql with nest.js  (0) 2021.09.02

    댓글

Designed by Tistory.