어떤 사이트를 들어갔을떄 여러가지 페이지가 있다.
어떤 페이지는 로그인된 유저들만 사용할 수 있고
다른 페이지는 누구나 로그인을 하지 않아도 이용할 수 있는 페이지가 있다.
예로 로그인을 해야만 글을 쓸 수 있고 관리자만 이용 할 수 있는 페이지 들이 있다.
그런 것들을 하나하나 체크하기 위해서 이 기능을 만드는 것이다.
저번에는 토큰을 만든 후
토큰을 클라이언트에서는 쿠키에 넣었고
서버에는 유저 데이터 베이스에 넣어 주었다.
그래서 이 두가지를 이용해서 서로 토큰이 맞는지 계속 체크를 하는 것이다.
그렇기 위해서 클라이언트에서 쿠키에 담겨져있는 토큰을 서버에 전달하는 것이다.
decode 시킬때 secretToken을 넣으면 user._id가 나온다.
그래서 서버에서 쿠키를 전달 받을때 쿠키가 encode 되어있는 상태에서 decode를 하면
유저 id 가 나오게 된다. 그래서 그 id를 가진 토큰이 있다면 그것은 인증이 맞다.
없거나 다르면 이 유저가 아니라는 것을 알 수 있다.
1.Cookie에서 저장된 Token을 Server에서 가져와서 복호화를 한다.
먼저 auth route를 만든다.
일단 시작하기전에 라우터를 한 페이지에만 나두면 굉장히 길어질 것이다.
그래서 나중에 express에서 제공되는 router를 이용해서 정리할 것이다.
auth라는 미드웨어를 추가할 것이다. req를 받은다음 cb하기전에 중간에서 뭘해주는 역할.
이거를 위해서 middleware라는 폴더를 만들고 auth.js라는 파일을 만든다.
위와 같이 코드를 작성후
클라이언트 쿠키에서 토큰을 가져온다. //cookie-parser를 이용하면 된다.
User를 사용하기 위해서 가져오고 메소드를 만든다.
err일 때와 user정보를 받지 못했을때를 코드를 만들어주고 req.token과 req.user를 받아와서
index.js 에서 req.user와 req.token을 쓸 수 있게 한다.
토큰을 decode한다.
유저 아이디를 이용해서 유저를 찾은 다음에
클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인
그 다음 토큰을 복호화 한후 유저를 찾는다.
유저가 있으면 인증이 Okay,
유저가 없으면 인증이 No 가 된다.