06-01 회원가입 및 로그인 구현

.·2022년 2월 23일

01 Express.js와 MongoDB로 웹서비스 만들기 2

회원가입 구현하기

회원 정보를 DB에 저장하기

회원의 비밀번호를 그대로 저장한다면?

관리자가 모든 회원의 비밀번호를 알 수 있음
=> 보안취약점 발생

비밀번호 저장 방법 - Hash

SHA1 - 사용방법


회원가입 페이지 만들기

  • form이 submit되었을 경우 join이라는 경로에 post 요청을 보낸다
  • onsubmit 속성 안에 특정 자바스크립트 함수를 실행시키면 form이 실행되기 전에 자바스크립트를 우선 실행해줌(여기서는 check()함수의 결과를 return, 만약 check함수에서 false를 리턴하면 subit이 실행되지 않고 멈춤)

회원가입 요청 처리하기



Passport.js와 로그인

Passport.js란?

  • Express.js 어플리케이션에 간단하게 사용자 인증 기능을 구현하게 도와주는 패키지 유저 세션 관리 및 다양한 로그인 방식 추가가능

passport-local


로그인 기능 구현하기

로그인 기능 구현하기 - 로그인 화면 구성하기

  • 위에 있는 화면 구성하기와 비슷

로그인 기능 구현하기 - passport-local strategy

  • passport-local strategy는 config를 전달해줘야함
  • usernameField와 같이 form 요청 값을 전달 받았을 때, LocalStrategy에 설정된 authenticator(?)(사진 오른쪽 부분)
    가 실행
  • (오른쪽 부분) 이메일을 통해 회원을 검색(없다면 에러)
  • passowrd를 hash값으로 만들어서 비교해줘야함
  • done call back을 이용해 값을 전달
  • done call back은 처음에 에러가 있다면 에러를 전달, 없다면 값을 전달

로그인 기능 구현하기 - Passport.js 설정하기

로그인 기능 구현하기 - Passport.js로 post 요청 처리하기

  • auth('/') 요청이 들어 왔을 때 만들었던 local-strategy가 실행, 실행된 결과를 받아서 session에 저장해주는 기능까지 passport가 자동으로 해줌
  • app.js 부분은 passport가 session을 사용하기 위한 설정들임

로그인 기능 구현하기 - session 유저 활용하기

  • passport가 session을 사용하기 위해 해주어야 하는 설정 중 하나

로그아웃

  • logout 경로로 접근했을 때 req.logout() 실행

로그인 확인 미들웨어



Session Store

Session이란?

Session 작동 방식


Express.js의 session

Session Store를 사용하는 이유

Session Store 구성

  • 왼쪽은 Express App이 종료되면 세션도 같이 없어짐

MongoDB를 Session Store로 사용하기

connect-mongo



회원과 게시글의 연동

회원과 게시글 연동 기능 설명


PostSchema 수정

게시글 등록 요청 수정

  • shortId로 유저를 검색해 없다면 No User, 있다면 Post 생성해서 author 객체 전달(title, content도)

게시글에 작성자 연동

  • 게시글 find 할 때 populate를 해줘야 템플릿에서 작성자의 이름이나 이메일 등을 사용 가능

게시글 수정, 삭제 시 유저 확인

  • find에 populate를 해줬기 때문에 밑에서 post.author.shortID 이렇게 사용 가능

작성자 게시글 모아보기 기능

Index

author에 index 설정하기

회원 게시글 라우팅 추가하기

게시글 목록 화면 수정



CSR로 댓글기능 구현하기

CSR 구현 방법

클라이언트에 리소스 선언 - HTML Template


댓글 화면 작성하기

데이터 비동기 호출 - API 작성하기

게시글에 댓글 추가하기

API 작성하기 - 댓글 작성

API 작성하기 - 댓글 목록


데이터 비동기 호출 - fetch로 클라이언트에서 api 호출하기

fetch로 API 호출하고 처리하기

fetch로 API 호출하고 처리하기 - 댓글 목록 불러오기



추가 - MongoDB Aggregation

Aggregation이란?

Aggregation을 사용하는 이유

간단한 Aggregation 예제




이미지 출처 - Elice

0개의 댓글