wafflestudio / seminar-2020

2020 Rookies 세미나
28 stars 49 forks source link

유저의 로그인 여부 확인관련 질문 #135

Open ghost opened 4 years ago

ghost commented 4 years ago

Q1. 유저의 로그인 여부를 어떻게 확인하나요?

과제를 해결하면서 점점 제가 이해한게 맞는지 의문점이 들어 질문드려봅니다.

제가 이해한 바는 다음과 같습니다.

MyAnswer. CSRFToken 으로 확인한다

CsrfViewMiddleware 가 CSRFToken 을 확인한 후, 유효하지 않으면 403 Forbidden 을 클라이언트에게 넘겨준다

Screen Shot 2020-09-09 at 7 50 39 PM

https://docs.djangoproject.com/en/3.1/ref/csrf/ 때문에, 과제번호 5,6,7 에 명시된 스펙인 로그인하지 않은 유저가 해당 API를 요청하면 403 FORBIDDEN처리해야 합니다. 은 따로 코드를 처리하지 않아도 된다

request.user 로 user 를 받아올 수 있는 걸 보면 CSRFToken 이 유효한 유저인지 그렇지 않은지 확인해주는 것이지 않나???

하지만... 6번을 코드로 구현하고 난 뒤, 포스트맨으로 확인한 결과 200 OK 를 받았지만

Screen Shot 2020-09-09 at 7 54 46 PM

뭔가 찝찝한 기분에 Send 를 계속 눌러보았습니다. 그래도 서버는 변함없이 200 OK 를 보내주었습니다.

로그아웃 한번 한 뒤 다시 요청을 보내면 200 OK 가 뜨면 안 되는 것 같은데... 분명 받은 Response 를 보면 Cookies 에서 sessionid 가 사라진 것을 보면 로그아웃 된 것도 갖긴 한데...

여기서부터 꽉 막혀버렸습니다. 조언을 구합니다.

읽어주셔서 감사합니다.

davin111 commented 4 years ago

csrf 관련한 것은 기본적으로는 로그인 자체와는 무관합니다. 제가 1번째 세미나 중에도 언급했듯, 유저가 로그인을 한 후, 이어지는 request에 대해 그 유저인지를 따지는 것은 다른 기제로 이루어지구요, X-CSRFToken은, 그렇게 로그인한 것으로 확인된 유저가 보내는 request라도 다 믿을 수 없기에 또 있는 안전장치(슬라이드에도 언급했었습니다)라고 생각하시면 됩니다. 마치 2차 비밀번호나 U-OTP 같은 것이랄까요?

과제 1의 참고하면 좋을 것들에도 있는 링크인데, https://docs.djangoproject.com/en/3.1/topics/auth/ 여기에서 언급되는 Django MIDDLEWARE들(우리 settings.py에도 있지요)을 통해 로그인된 유저를 확인한다는 것을 알 수 있습니다. 더 구체적이고 실전적으로 말하자면, 로그인 이후에 request.user로 접근하면 해당 User object를 얻을 수 있는 것이 이 덕분입니다. 중요한 내용이라 급히 와서 정정했는데, 일단 간단히 요 정도로 답하고, 시간이 더 생길 때 좀 더 원리적으로 자세히 얘기하겠습니다. 다른 분이 남기셔도 좋구요.

davin111 commented 4 years ago

그리고 이슈의 내용과 제목에서 과제 번호보다는, 내용 중심으로 더 남겨주시면 좋을 것 같습니다!

ghost commented 4 years ago

빠른 답변 정말 감사합니다, 다시금 슬라디드와 관련 링크 읽어보면서 해보겠습니다 :)

(그리고 말씀해주신대로 내용이나 제목에서 과제 번호를 지우는 것이 좋을까요?)

davin111 commented 4 years ago

지우실 필요까지는 없고, n번만으로는 다른 사람들(특히 저도 n번이 뭐지... 싶습니다)이, 또는 시간이 흘러서 볼 때 내용을 파악하기 어려운 느낌이 있어, n번을 구현했다, 같은 내용을 좀 더 구체적으로 풀어주시면 좋겠다는 바람이었습니다. 제목에서는 굳이 언급할 필요가 없다고 생각하기는 하구요.

ghost commented 4 years ago

넵, 알겠습니다. 다음부터는 말씀대로 내용중심으로 이슈를 남기도록 하겠습니다 감사합니다 👍

davin111 commented 4 years ago

그리고 지금 문제를 겪으시는 부분 역시 참고하면 좋을 것들의 링크에 직접적으로 관련된 부분이 있습니다. 정확히 짚자면 여기입니다!

ghost commented 4 years ago

그 부분으로 알 수 있는 것이었군요... 질문하길 잘한 것 같습니다 (또 얼마나 삽질을 해댔을지...) 감사합니다!