Node.JS + Express + mongoDB Tutorial SignIn, JWT 발행하기

인증 / 인가 튜토리얼 (2/3)

Jun
3 min readAug 17, 2020

본 글은 Node.JS + EXpress + MongoDB(Mongoose) 를 사용한 튜토리얼 입니다.

회원가입을 다룬 이전 글에서 이어지는 글 입니다.

로그인(Sign in) 구현하기

앞선 글에서 회원가입을 하는 로직을 설계했으니, 로그인으로 가보자. DB에 유저의 정보가 담겨있다고 가정하고 로그인을 처리하는 로직을 살펴본다.

소셜 로그인이 아니라고 한다면, 로그인을 할 때에 필요한 정보는 보통 두 가지이다.

  1. email
  2. password

우리는 이 두가지의 정보가 request 의 내용(body)에 담겨 오면, 이것을 이용해서 우리 데이터베이스에 저장되어 있는 회원정보인지를 확인하는 로직이 필요하다. mongoDB의 콜렉션은 앞서 작성한 User 도큐먼트(객체)가 담긴 Users 를 사용하게 된다.

/controllers/auth.js

이 파일은 담긴 폴더의 이름과 파일의 이름명 에서도 볼 수 있듯이, 인증/인가와 관련된 로직이 담긴 파일이다. 따라서, 앞서 작성한 signUp 미들웨어가 담겨있는 파일에 signIn(로그인) 미들웨어를 작성하고 signUp 처럼 모듈로 내보내면 역시 라우터에 로그인 미들웨어를 연결시킬 수 있다.

로그인의 핵심은 위의 코드에서 적었듯이, body로 실려온 유저의 정보를 데이터베이스에서 조회하는 것이다.

  1. input 이 유효한지 검사하기
  2. email 로 해당 유저가 데이터베이스에 있는지 없는지 검사하기
  3. 인풋으로 들어온 password를 암호화 되어 데이터베이스에 저장되어있는 암호랑 비교하기: bcrypt compare 메소드 사용
  4. 패스워드까지 일치할 경우 JSON Web Token 을 만들어서 응답에 담아 보내기

토큰을 응답으로 주는 이유는 http 통신과 크게 관련이 있다. 기본적으로 매 요청은 stateless(상태를 기억하지 못 함) 이기 때문에 서버는 유저가 로그인 한 지 아닌지를 클라이언트의 요청을 통해서가 아니면 알 수가 없다. 따라서 인증이 되었다는 토큰을 응답에 담아 보내야 한다.

이 토큰은 클라이언트(front-end) 에서 브라우저의 로컬스토리지에 저장하고, 인증/인가가 필요한 요청에 매 번 Headers의 Authroization 에 담아 보내게 된다.

보통 Express 앱에서는 한 번 로그인된 유저가 보내주는 토큰으로 유저의 인증/인가를 미들웨어로 처리한다. 이 미들웨어를 거쳐야 유저의 정보를 가져오든, 유저가 담은 장바구니의 정보를 가져오는 등의 요청에 대한 응답을 보낼 수 있게 처리한다. 이 미들웨어는 다음편에서 살펴보도록 한다.

/routes/auth.js

로그인 미들웨어도 회원가입 미들웨어와 같이 라우팅을 코드로 구현해야한다.

--

--

No responses yet