728x90

비밀번호 단방향 암호화

 

 

 

 

데이터 베이스에 입력된 비밀번호를 그대로 노출하게 된다면 보안에 큰 결함이 생기게 됩니다. 그래서 입력된 비밀번호를 단방향 암호화를 통해 못생기게 바꿔줄 예정입니다.

먼저 암호화를 하기 전에 Listener 에대해 짚고 넘어가야 합니다.

Typeorm listener

Listener 는 기본적으로 entity 에 무슨일이 생길때 실행됩니다.

entity 는 nestjs 에서 정의하는 데이터베이스 모델이에요

우리가 원하는것은 Beforeinsert 데코레이터 입니다.
insert 가 되기전에 먼저 실행해주는 데코레이터 입니다.

 

 

 

 

 

 

User class 에 BeforeInsert 부분을 추가합니다.

그리고 password 를 암호화 하기위해 "bcrypt" 를 사용합니다. bcrypt npm

 

bcrypt

A bcrypt library for NodeJS.

www.npmjs.com

npm i bcrypt
npm i @types/bcrypt --dev-only

 

 

 

 

 

 

다음 코드를 살펴보자면 현재 entity의 password 를 bcrypt.hash 를 사용하여 암호화를 하고 두번째 인자 는 암호화에 사용될 솔트 숫자로 지정되면 지정된 라운드 수로 솔트가 생성되어 사용됩니다.

 

 

 

 

 

 

await this.users.save(this.users.create({email, password, role}));

 

 

 

create 하는 과정에서 비밀번호가 Beforeinsert 를 거쳐 단방향 암호화가 된뒤 save 됩니다.

create 는 객체를 만들기만 하지 데이터베이스에 직접적으로 저장하지 않습니다. 그게 create 와 save 의 차이점 입니다.

 

 

 

 

 

 

다시 회원가입을 해보니 암호화가 잘되어 저장되었네요

728x90

'Side > uber-eats' 카테고리의 다른 글

라이브러리 없이 만드는 JWT - 2  (0) 2021.06.06
라이브러리 없이 만드는 JWT - 1  (0) 2021.06.06
Nestjs - User model  (0) 2021.06.01
Nestjs - Typeorm Repository 사용하기  (0) 2021.05.31
TypeORM setup 과 Nestjs Config  (0) 2021.05.23