https://www.npmjs.com/package/jsonwebtoken
User.findOne()
Bcrypt를 이용하여 plain password와 암호화된 (Hashed) 패스워드가 같은지 확인
토큰 생성을 위해서 JSONWEBTOKEN라이브러리를 다운로드
위 공식문서 참조
jsonwebtoken을 이용해서 token을 생성하기
//요청된 이메일이 데이터베이스에 있는지 확인
//요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는지 확인
//비밀번호까지 맞다면 Token 생성
//토큰을 저장한다. 어디에? 쿠키, 로컬스토리지.. 등등
- 페이지 이동 때마다 로그인되어있는지 안되어있는지, 관리자 유저인지 등을 체크
- 글을 쓸때나 지울 때 권한이 있는지 체크
토큰을 만든뒤 유저 정보에 넣어주고
클라이언트는 토큰을 쿠키에, 서버는 디비에 토큰을 넣어놓고 둘이 맞는지 계속 확인
-> 쿠키가 일치 X -> authentication False!
//인증 처리를 하는곳
//클라이언트 쿠키에서 토큰을 가져온다.
//토큰을 복호화한 후 유저를 찾는다.
//유저와 토큰 정보 request에 넣어줌
//next가 없으면 미들웨어에 갇힘
//유저가 있으면 인증 O
// 유저가 없으면 인증 X
//토큰을 디코드 한다.
//decoded된 게 user._id
//유저 아이디를 이용해서 유저를 찾은 다음에
//클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인
role 0 -> 일반 유저
role 0이 아니면 -> 관리자
//여기까지 미들웨어를 통과해 왔다는 얘기는 Authentication이 True라는 말
// 클라이언트에 정보제공