NestJs(2)_TypeORM(PostgreSQL), Auth관리

임쿠쿠·2021년 8월 9일
1

NestJS

목록 보기
2/2
post-thumbnail

1. TypeORM(PostgreSQL)

(1) TypeORM, postgresql 연동

npm i pg typeorm @nestjs/typeorm --save
  • configs/typeorm.config.ts
  • src/app.module.ts

(2) TypeORM, Entity 생성

@Entity()

  • Entitu() 데코레이터 클래스는 해당 클래스가 엔티티임을 나타내는 데 사용 ~ CREATE TABLE

@PrimaryGeneratedColumn()

  • PrimaryGeneratedColumn() 데코레이터 클래스는 해당 열이 엔티티의 PK 지정

@Column()

  • Column() 데코레이터 클래스는 해당 엔티티의 다른 열

(3) Repository 생성 및 이용

레포지토리는 엔티티 개체와 함께 작용하여 CRUD 등을 처리

Repository 파일 생성
@EntityRepository()

  • 클래스를 사용자 정의 저장소로 선언하는 데 사용
  • 사용자 지정 저장소는 일부 특정 엔티티를 관리하거나 일반 저장소로 사용

모듈 및 서비스에 Repository 주입

  • module.ts
  • servcie.ts ~ @InjectRepository 데코레이터로 repo 주입

DB로직 Repository 작성 후 서비스에서 사용
DB관련 로직은 Service단이 아닌 Repository에서 작성 후 Service에 주입

  • Repository에 DB 로직 작성
  • Service에 임포트

(4) TypeORM 엔티티 (@Unique)고유값 처리

  • Unique에 대한 에러 처리를 하지 않을 시, nest js는 기본적으로 Internal server error 반환

  • postgresql error_code 23505(unique_violation)에 대한 에러처리

(5) TypeORM 엔티티 관계 (1 : N)

User 엔티티

  • OneToMany의 첫번째 파라미터에는 가져올 엔티티의 타입 지정
  • 두번째 파라미터는 가져올 엔티티 컬럼 명시
  • 세번째 파라미터 eager이 true이면 user 정보 가져올시 article데이터도 같이 가져옴

2. NestJS Auth 구현

npm i @nestjs/jwt @nestjs/passport passport passport-jwt @types/passport-jwt --save

(1) JWT를 이용한 토큰 생성

authmodule.ts

  • 애플리케이션 모듈에 JWT, Passport 등록

authservice.ts

  • 애플리케이션 서비스에 JWT 종속성 주입 및 토큰 생성

(2) Passport Strategy

jwt.stategy.ts

  • jwt.startegy를 다른 app에서 사용하기 위해 @Injectable() 주입
  • PassportStrategy 상속
  • 토큰 유효성 검사 후 username에 대한 DB 쿼리 사용을 위한 userRepository 주입
  • secretOrKey : 토큰 유효성 체크
  • jwtFromRequest : ExtractJwt.fromAuthHeaderAsBearerToken() : Authrozation Header로 부터 토큰 받아 BaarerToken 인증

클라이언트 req 요청에 AuthGuard 미들웨어 적용 및 user 정보 획득

AuthGuards : nestJS 인증 미들웨어로, 지정된 경로로 통과할 수 있는 유저와 허용되지 않는 유저를 서버에게 알림

커스텀 데코레이터를 통한 req 요청의 user 정보 획득(번외)

nestJS미들웨어 called 순서
: guard -> interceptor (before) -> pipe -> controller -> service -> controller -> interceptor (after) -> filter -> client

profile
Pay it forward

0개의 댓글