1. 패키지 설치
- node js 다운로드 npm init
- express js 다운로드 npm install express --save
- index.js파일 만들기
- index.js 에 기본적인 express js app 구현
- mongoose 설치 및 연결
- db 모델, 스키마 생성
2. 회원가입 기능 만들기
- register 라우터 생성
- client - server 통신할 body-parser 다운로드 npm install body-parser --save
- body-parser options(urlencoded or json) 추가
-모델 User 객체(인스턴스) user 생성
- mongoDB의 document 메서드 save 이용해서 err, userInfo 를 각각 실패, 성공 할때 json 형식으로 넘겨줌
nodemon 설치
-소스를 변경할때 바로 감지해서 자동으로 서버를 재 시작해주는 nodemon 다운로드 npm install nodemon --save -dev
-dev = local모드, production 모드중에 local모드에서만 실행 하기위해서 사용
-script 하나더 만들기 "이름자유" : "nodemon index.js"
3. 비밀 설정 정보 관리
- .gitignore파일 생성 (node_module, dev.js 넣어줌)
- config폴더 안에 dev.js, key.js, prod.js 파일 추가
- key.js 에서 local(dev), production 모드 분기 처리
4. 비밀번호 암호화
bcrypt 다운로드 npm install bcrypt --save
- mongoDB 의 document메서드 pre 이용해서 비밀번호 암호화 시키기
- bcrypt 불러오고 salt rounds(글자 개수) = number
- genSalt 함수를 이용해서 salt생성
- hash 함수를 이용해서 비밀번호 암호화
- next()를 이용해서 user.save로 돌려보내줌
5. login 기능 구현
- login 라우터 생성
- 데이터 베이스에서 요청한 email 찾기
- mongoDB 의 model 메서드 findOne을 이용해서 email찾기
- 데이터 베이스에서 요청한 email이 있다면 비밀번호가 같은지 확인
- comparePassword 메서드 구현
- bcrypt의 compare 함수를 이용해서 plainPassword 와 db에 암호화된 this.password가 같은지 비교
- 틀리면 err 맞으면 ismatch로 넘겨줌
- 비밀번호 까지 같다면 Token 생성
- generateToken 메서드 구현
- jsonwebtoken 다운로드 - npm install jsonwebtoken --save
- token생성해서 user로 넘겨줌
- token 생성 실패 err 메세지
- token 생성 성공 쿠키에 저장
- cookie-parser 다운로드 - npm intall cookie-parser --save
- app.use cookieparser 추가
- x_auth 에 user.token 넣어줌
6. Authentication(증명, 입증, 인증) 구현
- auth 라우터 생성
- 라우터(endpoint)를 만나고 req, res 콜벡으로 넘어가기전에 중간단계인 auth를 거친다.
- 인증을 처리하기 위한 middleware 폴더 생성 및 auth.js 파일 생성
- 로그인했을때 client cookie에는 암호화된 x_auth : 토큰이 저장되있다.
- server(db) 저장된 토큰을 복호화 시키면 user._id가 나온다.
- findByToken 메서드 구현
- 해당 user._id가 가진 토큰과 cookie에 저장된 토큰이 일치하면 인증 성공 아니면 실패
- json 형식으로 정보 출력
7. logout 기능 구현
- logout Route 생성
- logout 하려는 유저를 데이터베이스에서 찾는다.
- findOneAndUpdate 메서드 이용
- 그 유저의 토큰을 지워 준다.
'Portfolio > Node, React login page' 카테고리의 다른 글
Node Document (0) | 2022.09.04 |
---|
댓글