라이브러리 없이 만드는 JWT - 2
우리만의 token module 만들기
nest g mo jwt
nest cli 로 jwt module 을 생성합니다.
static module 과 dynamic module
여기서 기억해둬야 할부분은 module 의 종류는 두가지가 존재하는데, 첫 번째는 'static module'입니다.
UserModule 같은 경우 어떠한 설정도 되어 있지 않습니다. 이게 바로 static module
입니다.
여기서 또 중요한 점은 .forRoot에 마우스를 올려보면 .forRoot는 Dynamic Module
이라는 사실입니다.
Dynamic module
은 설정이 적용되어 있는 module 입니다 그게 다에요 !
Users module 에서 ConfigModule 을 ConfigService 로 불러 쓴 것처럼 jwt module을 static 에서 dynamic 하게 변경하여
jwtModule을 jwtService 로 import 하여 사용 하게끔 변경하겠습니다.
이걸 해보면 이제 module, service 그리고 nestjs 에서 다룬 부분들이 전부 연결되면서 이해 가 될거에요
여기서 꼭 알아둬야 할점!!
dynamic module
은 사실 결과적으로static module
이 된다는 겁니다
dynamic module 에서 static module 이 되는 순서
- 동적인 모듈 만들기
- 여러가지 옵션 설정 적용시키기
- 리턴 값으로 우리가 설정한 옵션들이 존재하는 상태의 정적인 모듈을 내보내
nest g mo Jwt
nest g s Jwt
Jwt service test 파일은 일단 지워주도록 할게요
JwtModule 에 forRoot를 사용하기 위하여 function 을 만듭니다
import { DynamicModule, Global, Module } from '@nestjs/common';
import { JwtService } from './jwt.service';
@Module({})
@Global()
export class JwtModule {
// forRoot 말고 원하는대로 정해도 상관없지만 개발자들의 약속
static forRoot(): DynamicModule {
return {
module: JwtModule,
exports: [JwtService],
providers: [JwtService],
};
}
}
다음 코드를 살펴보겠습니다.
module 에는 module 의 이름이 들어가면 됩니다.
exports 에는 JwtService 를 넣어주고 다른 모듈에서 import 하여 쓸수 있게끔 해줍니다. providers 에도 service 를 넣어줍니다.
Global 데코레이터는
ConfigModule 에 isGlobal: true 와 동일한 역활을 합니다.
isGlobal 이 true 인 경우
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JwtService } from 'src/jwt/jwt.service';
import { User } from './entities/user.entity';
import { UsersResolver } from './users.resolver';
import { UsersService } from './users.service';
@Module({
imports: [TypeOrmModule.forFeature([User]), ConfigService, JwtService],
providers: [UsersService, UsersResolver],
})
export class UsersModule {}
imports 에 넣어 주지 않아도 에러가 발생하지 않습니다.
잘동작 하는지 확인하기 위해 jwt.service.ts
에 간단한 함수를 하나 만들어 테스트 하겠습니다.
import { Global, Injectable } from '@nestjs/common';
@Injectable()
export class JwtService {
hello() {
console.log('hello');
}
}
그런 다음 users.service.ts
로 돌아와
...
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User) private readonly users: Repository<User>,
private readonly config: ConfigService,
private readonly jwtService: JwtService,
) {
this.jwtService.hello();
}
...
코드를 수정한뒤 서버를 실행 시킵니다.
아직 환경설정에 관해서는 건들인게 없지만 정상적으로 잘 동작 합니다.
'Side > uber-eats' 카테고리의 다른 글
라이브러리 없이 만드는 JWT - 1 (0) | 2021.06.06 |
---|---|
Nestjs , Typeorm 에서 Hasing passwords (0) | 2021.06.05 |
Nestjs - User model (0) | 2021.06.01 |
Nestjs - Typeorm Repository 사용하기 (0) | 2021.05.31 |
TypeORM setup 과 Nestjs Config (0) | 2021.05.23 |
댓글
이 글 공유하기
다른 글
-
라이브러리 없이 만드는 JWT - 1
라이브러리 없이 만드는 JWT - 1
2021.06.06 -
Nestjs , Typeorm 에서 Hasing passwords
Nestjs , Typeorm 에서 Hasing passwords
2021.06.05 -
Nestjs - User model
Nestjs - User model
2021.06.01 -
Nestjs - Typeorm Repository 사용하기
Nestjs - Typeorm Repository 사용하기
2021.05.31