[FP] 20201228 프로젝트 5일차

설정·2020년 12월 28일
0
post-thumbnail

프로젝트 5일차

  • Git Flow 실습
  • Token 공부
    • accessToken
    • refreshToken
  • Token 발행부터 만료까지
  • bcrypt 이용하여 password 암호화

지난 목요일 이후 금요일부터(크리스마스)부터 주말까지 공식 스케줄은 쉬는날이었다.
그래서 오늘 팀원들과 오랜만에 다시 만났는데, 뭐랄까 3일을 쉬고 다시 만나다보니 처음 프로젝트를 시작했을 때의 떨림이 있었다.
다시 생각해보니 그건 아무래도 오늘부터 code를 작성하기때문이 아닐까 생각한다.

여느때처럼, 우리 팀은 오전 10시에 Meet로 만나서 짧게 프론트엔드백엔드 간의 스케줄을 공유했고, ISSUE가 발생하는 일이 생긴다면, Slack으로 연락하기로 했다.
짧은 오전 미팅 후 각 파트별 팀원들끼리 다시 미팅을 시작했고
나는 백엔드이기 때문에 백엔드팀원과 함께 이전에 작성해 둔 GitHubMilestones 스케줄대로 작업을 이행하기로 했다.

우리의 오늘 스케줄은

  • Token 관련 작업 (같이)
    • accessToken
    • refreshToken
  • 회원가입과 탈퇴
  • 로그인과 로그아웃

크게 잡은 스케줄은 위의 3가지이다.
Token관련은 같이 코드를 작성하기로 했었다.
이 부분은 인증과 관련이 있고, 앞으로 작성해 나갈 부분에서 크게 차지하고 있으며,
또 서로 이 부분에 대해서 확실하게 짚고 넘어가야 하는 부분이라 생각했기 때문이다.

Token을 작성하면서 우리는 Schema를 작성할 때 미처 생각치 못한 refreshToken의 레코드를 추가로 작성을 해주었다.

$ npx sequelize-cli db:migrate:undo

이 작업을 진행하면서 알게 된 부분이 undo를 한다고해서 VS code에 작성한 model은 수정이 되지 않는다는 것을 알았다.
우리는 undo를 하면 DB수정과 함께 model도 수정이 되는 줄 알았는데 보기좋게 예상과 빗나갔다.

또한, Token에 관련된 작업을 실행하기 위해 tokenRequest.js를 만들었고,
js파일에서 유효성 검사 및 토큰 만료시간에 따른 Error처리를 해주었다.

작업 관련

1. 회원가입

  • bcrypt를 이용하여 패스워드 암호화하여 데이터베이스에 넣기

도전

  1. 실패 CASE
    findOrCreate로 유저의 정보를 찾고, 없으면 생성
    이 때, bcrypt를 이용해 암호화까지는 성공했지만, 데이터베이스에 넣어지지 않았음
  • Error
    1. UnhandledPromiseRejectionWarning: SequelizeValidationError: string violation: password cannot be an array or an object
    : findOrCreate에서 새로운 유저를 생성하는 defaults부분에서 bcrypt를 할 시 에러 및 {} 빈 객체가 데이터베이스에 들어간다.
    2. findOrCreate에서 .then(([user, created])) 이용
    유저가 있는 경우 이미 있다는 에러메세지, 없다면 passwordbcrypt하는데 이 때, password는 암호화가 되지만, 데이터베이스에는 안들어간다.
  1. 성공 CASE
    1. findOne으로 유저를 찾고, passwordbcrypt 이용해 해시
    2. 유저의 정보가 없다면 create()를 이용해 유저 생성하고, password에 암호화된 password를 넣는다.
    3. 데이터베이스에 암호화된 password가 들어간다.

bcrypt 사용법

1. install

$ npm install bcrypt

2. 비동기 사용을 권장한다

const bcrypt = require('bcrypt')
const saltRoounds = 10; // 암호화된 문구길이

3. 암호해시 방법

  • 기술 1 : 별도의 함수 호출에서 salt 및 해시 생성
bcrypt.genSalt(saltRounds, function(err, salt) {
  bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
    // 비밀번호 DB에 해시 저장
  });
});
  • 기술 2 : salt 및 해시 자동 생성
bcrypy.hash(myPlaintextPassword, saltRounds, function(err, hash) {
  // 비밀번호 DB에 해시 저장
});

2. 회원탈퇴

회원탈퇴는 destroy()를 이용하여 데이터베이스에서 삭제한다.

0개의 댓글