마지막 단계인 로그아웃 기능이다.🥲
원리는 로그아웃 하려는 유저를 DB에서 찾아 그 유저의 토큰을 지워준다. 인증을 할 때 Client 쿠키에 있는 토큰을 가져와서 DB의 토큰과 같은지 확인을 하므로써 인증을 지속적으로 진행하는데, DB에 토큰이 없다면 클라이언트에서 가져온 토큰이 맞지 않기 때문에 인증이 되지 않는다.
결국, 그냥 DB에서 토큰을 지워주면 인증이 되지 않아서 로그인이 풀려버리게 된다. 해당 원리를 이용하여 로그아웃 기능을 구현하자.💪
app.get("/api/users/logout", auth, (req, res) => {
User.findOneAndUpdate({ _id: req.user._id }, { token: "" }, (err, user) => {
if (err) return res.json({ success: false, err });
return res.status(200).send({
success: true,
});
});
});
로그아웃 라우터를 생성하고 기능을 구현한다. MongoDB에서 제공하는 findOneAndUpdate 메소드를 이용하여 유저 아이디를 찾고 token을 지워주는 업데이트를 시켜준다.
_id의 req.user._id는 auth 미들웨어에서 유저를 넣어줬기 때문에 미들웨어에서 가져와서 찾는다.
앞의 라우터들의 원리와 동일하게 에러가 난다면 success에 false를 할당한 뒤 err를 띄워주고 성공한다면 success에 true를 할당한 값을 보내주면서 토큰을 정상적으로 지운다.
성공!🔥
강의를 따라하면서 회원가입, 로그인, 로그아웃 기능들을 구현해봤는데 백엔드쪽은 처음이라 익숙치않아서 어려웠다. 그래도 뒤에서 어떻게 돌아가는지 대략적인 원리를 파악할 수 있어서 좋은 경험이었다.👍
전체 코드는 github에서 확인할 수 있다.
사실 성공하기 전에 하나의 문제를 겪었는데, 같은 문제를 겪은 분들이 있을까 싶어 공유한다.
write EPROTO 140640072531784:error:100000f7SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../thired_party?boringssl/src/ssl/tls_record.cc:242:
검색하면 http를 https로 바꾸면 해결된다는 분이 많은데, 나는 조금 결이 다른 문제였다.
MongoDB에서는 현재 해당 사용하고 있는 IP를 등록해주어야 정상적으로 사용이 가능하기 때문에, IP 등록을 해주어야한다.
MongoDB 에 접속한 후 Network Access 탭에서 현재의 IP주소를 등록해주자.👍
따라하며 배우는 노드, 리액트 시리즈 - 기본 강의 를 공부하며 작성한 글입니다.