니르바나
1k
2020-01-10 12:06:52
6
1074

첫 풀스택 개발 일지(로그인 판단 힌트 감사합니다!)


django vue 기반으로 부동산 관련 서비스 개발 중입니다.

풀스택 개발은 처음이라 서툰점이 많아 이것저것 찾아가면서 개발하고 있습니다.

웹팩 번들러 붙여서 개발중인데, 향후에 배포도 살짝 걱정되네요..ㅎㅎ


엊그제까지 로그인 / 비로그인 유저 판단하는 방법을 서버 측에서 인증여부를 판단하고 response에 데이터를 실어주는 형태로 처음에 개발하려 했습니다.

vue app 생성시 유저 정보를 가져오는 루틴에서 로그인 여부를 함께 판단하는 코드를 추가했는데, 해당 데이터를 props로 전달하다보니 다른 페이지에서 새로고침해버리면 사라지는 문제가 생겼습니다.

그래서 이걸 window storage같은 곳에 담아서 글로벌하게 관리 해야되나, 아니면 각 페이지별로 인증여부를 매번 호출해줘야하나 고민중이던 찰나..본 사이트에 질문을 남겼고 로그인한 인원만 토큰을 주면 되지 않냐 라는 이야기를 해주셨습니다.

그래서 서버쪽 비로그인 시 토큰 제거 코드를 구현하고,

쿠키는 당연히 제거된 토큰 코드가 업데이트 될줄 알았는데 그렇진 않더라구요.

그래서 로그아웃 버튼 클릭시 cookie내 토큰 정보를 제거하도록 했습니다.

일단 동작은 잘하네요.

짜다보니 drf를 쓰다보니 대부분 알아서 다 해줘서 좋은데 깊은 이해가 없으니 조금 변형이 필요하면 많이 헤매게 되네요.

일단 네트워크, 보안 책을 사서 구동방식에 대한 이해를 좀 해야할 것 같습니다.

사실 구현자체는 구글링해서 어떻게든 하면되는데 이게 최선의 방법이냐에 대한 확신이 없네요.ㅠ 

0
  • 댓글 6

  • 니르바나
    1k
    2020-01-10 12:21:01

    생각해보니 로그아웃 버튼 클릭시로 하면안되고,

    로그아웃 url 입력될 때 응답을 받아와서 성공하면 token을 삭제하도록 해야 완벽할듯합니다.

    이게 근데 일반적인거 맞나요?

  • 니르바나
    1k
    2020-01-10 14:09:15

    아래 방법으로 구현하는게 옳은것 같습니다.

    서버단에서 csrftoken 만료 코드를 삽입해서 response 헤더에 실어서 보내주면됩니다.


    장고 기준으로 아래 코드 작성시 csrftoken 제거 가능합니다.

    그럼 로그인, 로그아웃 판단되구요.

    해당 csrftoken이 비어있는 경우 로그아웃으로 판단하여 메뉴 구성해주시면됩니다.

  • gl2ep
    77
    2020-01-10 14:13:15

    음.. 로그인할때만 세션에 담아서 체크하면 되는거 아닌가요?

  • 니르바나
    1k
    2020-01-10 14:33:54

    django에서 csrf token은 쿠키에 담겨저서 가서 , 로그아웃시 쿠키에 csrf 삭제만 했습니다.

    django 기본 코드는 로그아웃 후에도 client의 session id만 삭제하고 csrf_token은 그대로 두더라구요.

    세션에 저장하면 이점이 있을까요?

  • 니르바나
    1k
    2020-01-10 15:27:21 작성 2020-01-10 15:28:53 수정됨

    csrf_token이 로그인 시 발급되는줄 알았는데,

    로그인 페이지 접속하면 발급이 되는군요.ㅠ

    그러다보니 로그인 페이지 접속 후 로그인하지 않고 랜딩 페이지 접속하면

    로그인 된걸로 인식해서 화면이 제대로 동작하지 않네요..


    말씀하신대로 session을 쓰던가 해야겠습니다.


    인증관련 페이지만 django auth 기본 로그인 페이지를 사용하고 있어서

    다른 페이지들은 vue spa로 구현되있는데 그것 때문에 더 복잡한듯합니다.ㅠㅠ

  • 니르바나
    1k
    2020-01-10 15:55:27

    session으로 해보려고 하다가 로그인 페이지는 django에서 기본적으로 제공해주는 페이지,

    인증 관련 외 나머지 서비스 페이지들은 vue에 구현되있어서 session 사용이 로그인 후 체크하는게 불가능한것 같아요.

    template으로 되어있으면 서버 쪽에서 코드가 돌아가니까 가능한데, 그게 아니라 session 데이터 가져오는게 좀 번거로워서 말씀하신것처럼 로그인 시에 cookie로 로그인 여부 정보를 담아서 보냈습니다.

    이렇게 하니 쉽게 해결가능하네요;;

    괜히 csrf 건들지말고 로그인여부만 쿠키에 담아 보냈으면 이렇게 안헤맸을것 같습니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.