Node & React basic #10

Jay·2023년 5월 14일
0

Node & React basic

목록 보기
10/21
post-thumbnail

오늘은 로그아웃 기능을 구현해 본다.
이를 위해서는 로그아웃 Router를 만들고 유저를 데이터베이스에서 찾은 다음
그 유저의 토큰을 지워줘야 한다.

토큰을 지워주면 되는 이유는 지난번 Authentification기능을 만들 때, 클라이언트의 토큰을 가져와서 DB와 비교했었는데, 이 토큰이 일치하지 않으면 인증이 풀리고 그것이 바로 로그아웃이기 때문이다.

index.js에서 get method로 logout시에 뭘 할지를 작성해주자.
지난번 작성한 Auth도 이번에 테스트하게 된다.

app.get("/api/users/logout", auth, (res, req) => {
  User.findOneAndUpdate({ _id: req.user._id }, { token: "" }, (err, user) => {
    if (err) return res.json({ success: false, err });
    return res.status(200).send({ success: true });
  });
});

오늘도 auth미들웨어를 거쳐갈거고 findOneAndUpdate를 쓴다. 왜냐하면 토큰을 지워줘야하기 때문.
일치하는 id를 찾고 토큰을 지워준다.

서버를 켜고 postman에서 테스트를 하는데..!
오류가 뜬다..
역시나 콜백펑션 문제였음
User.js에서 로그인 기능을 구현하기 위해서 만든 findByToken에서의 findOne의 콜백펑션 문제가 있어서, .then.catch로 바꿔주고

(이렇게 수정함)

혹시 몰라서 위에 작성한 findOneAndUpdate에서도 콜백펑션을 없앴다.

..엇 근데 지금 콜백펑션 살아있는 버전으로 테스트해도 문제없이 결과가 나오네..

(auth.js에서 구현한 대로 지금 유저가 없다고 알려주는 중)
아니었다. login을 다시 한 다음 콜백펑션이 살아있는 코드로 logout을 하려고 했더니 역시나 Model.findOneAndUpdate() no longer accepts a callback에러가 떴다.
위에 있는 isAuth랑 error는 유저가 login이 안 돼있는데 내가 자꾸 logout을 요청해서 auth에서 에러를 반환해 준 것이고 정상적으로 logout을 하면 이게 뜬다

내가 수정한 것은 헛짓이 아니었다!

중간에 강사님 화면에서도 _id를 찾을 수 없다는 오류가 나왔는데 이건 위의 logout 구현시 res랑 req순서를 바꿔 써버려서 그렇다.

오늘도 즐거운 배움의 시간

profile
ㄱ이 아닌 개발자가 되고 싶은 사람

0개의 댓글