Auth (Authentication )기능

holang-i·2021년 6월 4일
0

Node & React

목록 보기
10/11
post-thumbnail

Authentication 이란? 왜 필요할까?

권한이라는 기능이 왜 필요할까?

어떤 사이트를 들어갔을 때 페이지마다 접근 권한을 다르게 줘야된다.

예를 들어서

  • 페이지를 이동 할 때 마다 로그인이 되어 있는 지? 안 되어있는지를 체크해야 된다.
  • 글을 작성하거나 삭제할 때 권한이 있는지를 체크해야된다.
  • 관리자만이 들어갈 수 있는 페이지가 존재하기 때문이다.

위의 경우들을 체크하기 위해서 Authentication기능을 만들어 놔야 된다.


Authentication 기능 간략하게 알아보기

이메일과 비밀번호가 다 일치하면 Token을 만들어서 User정보에 넣어 놨었다.
그리고 Cookie에다가도 token을 넣어주었다.

이것을 그림으로 나타내면 아래와 같다.

  • Client에서는 Cookie에 Token을 저장
  • Server에서는 User DataBase에 넣어줌

위의 두 가지 토큰이 서로 맞는지를 계속 체크해야된다.

  • Client에서 Server에 Cookie에 담겨져있는 토큰을 전달한다.
  • Incode되어있는 쿠키를 Decode하면 userId가 나온다.
    (토큰을 만들 때 user._id와 '임의의 문자열'을 이용해서 토큰을 만들었었다.
    문자열을 넣으면 user._id가 나오게 된다.)
  • 데이터베이스에 해당 user._id가 있다면, 인증이 맞다.
    만약 토큰이 다르면 user가 다르기 때문에 원하는 로직을 처리한다.

  1. Cookie에서 저장된 Token을 Server에 가져와서 복호화를 한다.
  2. 복호화를 하면 User ID가 나온다.
    그 User ID를 이용해서 데이터베이스 User Collection에서 User를 찾은 후 쿠키에서 받아온 token이 이 User도 갖고 있는 지 확인한다.
  3. 쿠키가 일치할 경우와 일치하지 않을 경우 로직을 처리한다.

auth 미들웨어 / 미들웨어란?

미들웨어란 end point, request를 받은 다음에 callback function을 실행하기 전에 중간에서 어떠한 작업을 해주는 것을 말한다.

Auth를 확인하는 미들웨어를 추가한다.


Auth 확인

Client의 쿠키에서 토큰을 가져온다. 토큰을 복호화 한 뒤 해당 User를 찾는다.

각각 User가 있는 경우와 없는 경우의 응답을 다르게 해주면 되는데 user가 없는 경우, response에 json으로 { isAuth: false } 와 같은 응답을 보내주면 된다.

만약, user가 있는 경우에는 request 객체의 token에 받아온 토큰을 넣고, request에 user라는 키로 찾은 user를 넣어준다.


복호화






따라하며 배우는 노드, 리액트 시리즈를 통해 개념을 익히면서 실습하고 있습니다.
https://bit.ly/3wGxKGC

profile
🌿 주니어 프론트엔드 개발자입니다! 부족하거나 잘못된 정보가 있다면 알려주세요:)

0개의 댓글