[Node.js] logout은 꼭 post 메서드를 써야 할까

    에러메세지

    Layer.handle [as handle_request], logout method

     

    다시말해 logout 라우터가 없습니다. 라는 에러가 떴었다. 

    Layer.handle [as handle_request]를 키워드로 검색했을 때, request를 보내고 response로 응답하는 순서가 바뀌어서

    (req, res) 순서를 잘 지켜주면 해결된다는 글을 참고하였지만 내 상황에는 맞지 않았다. 

     

    따라서 logout 라우터와 관련한 코드만 눈 빠지도록 찾아봤다. 

     

    결론은, logout을 받아오는 메소드가 get이 아닌 post로 써놓는 실수를 했기 때문에 났던 error 였다.

    auth.js
    수정한 auth.js

    여기서 logout은 꼭 post 메서드를 써야 할까라는 궁금증이 들어 찾아보았다. 

     

     

     

    logout에서는 보통 어떤 HTTP method를 사용해야 할까?

    회원가입의 경우 이미 회원정보가 DB에 있는지 검사를 해준 이후에 없을 경우 DB에 정보를 넣어줘야 하기 때문에 POST방식으로 요청을 보내는 것이 적절할 것이다. 

     

    로그인의 경우에도 POST 방식으로 많이 쓴다. 

     

    이유는 무엇일까?

    GET 방식으로 로그인을 구현한다고 가정하면 데이터를 쿼리스트링을 통해서 전달하는 방식이 있을 것이다. 

    이 방식의 경우, 쿼리를 캐싱한다면 비밀번호등 회원의 민감한 정보가 노출될 수 있다.

     

    *쿼리 캐싱이란? 쿼리문을 이용해서 각 상황에 해당하는 값을 조회한 후 이를 저장하고 있다가 같은 쿼리문이 요청될 경우 미리 캐싱된 값을 반환하는 DBMS기능이다. 

     

     

     

    로그아웃의 경우는 다양한 메서드를 사용할 수 있다. 

     

    1. DELETE 방식

    로그인 시 발급받은 토큰의 유효기간을 만료하는 방법이 있다. 토큰값을 만료하면서 클라이언트에 저장된 유저 정보를 초기화시킨다. 

    2. POST 방식

    로그아웃 요청은 서버에 세션/토큰을 처리하는 프로세스를 요청하는 것으로 POST 요청을 사용해야 한다.

     

    +) 기본적으로 Spring Security는 로그아웃 요청이 POST 메서드여야 하지만, CSRF 보호를 비활성화하는 경우 GET 메서드를 사용할 수 있다고 한다. 

    * CSRF 공격(Cross Site Request Forgery)은 웹 애플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격이다. 

    3. GET 방식

    이 방식을 사용할 때는 부작용이 있을 수도 있는데, 이는 prefetch를 알아야 한다.

    prefetch는 사용자를 위해 GET링크를 미리 가져와 로딩시간을 줄이는 프로세스인데, 이 때문에 로그아웃 링크를 미리 가져오려고 시도한다면 사용자를 로그아웃시킬 수 있다. 

    'Backend > Node.js' 카테고리의 다른 글

    [Node.js] object Undefined Error  (0) 2023.02.20

    댓글