Open ghost opened 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를 얻을 수 있는 것이 이 덕분입니다. 중요한 내용이라 급히 와서 정정했는데, 일단 간단히 요 정도로 답하고, 시간이 더 생길 때 좀 더 원리적으로 자세히 얘기하겠습니다. 다른 분이 남기셔도 좋구요.
그리고 이슈의 내용과 제목에서 과제 번호보다는, 내용 중심으로 더 남겨주시면 좋을 것 같습니다!
빠른 답변 정말 감사합니다, 다시금 슬라디드와 관련 링크 읽어보면서 해보겠습니다 :)
(그리고 말씀해주신대로 내용이나 제목에서 과제 번호를 지우는 것이 좋을까요?)
지우실 필요까지는 없고, n번만으로는 다른 사람들(특히 저도 n번이 뭐지... 싶습니다)이, 또는 시간이 흘러서 볼 때 내용을 파악하기 어려운 느낌이 있어, n번을 구현했다, 같은 내용을 좀 더 구체적으로 풀어주시면 좋겠다는 바람이었습니다. 제목에서는 굳이 언급할 필요가 없다고 생각하기는 하구요.
넵, 알겠습니다. 다음부터는 말씀대로 내용중심으로 이슈를 남기도록 하겠습니다 감사합니다 👍
그리고 지금 문제를 겪으시는 부분 역시 참고하면 좋을 것들의 링크에 직접적으로 관련된 부분이 있습니다. 정확히 짚자면 여기입니다!
그 부분으로 알 수 있는 것이었군요... 질문하길 잘한 것 같습니다 (또 얼마나 삽질을 해댔을지...) 감사합니다!
Q1.
유저의 로그인 여부를 어떻게 확인하나요?
과제를 해결하면서 점점 제가 이해한게 맞는지 의문점이 들어 질문드려봅니다.
제가 이해한 바는 다음과 같습니다.
MyAnswer.
CSRFToken 으로 확인한다
CsrfViewMiddleware 가 CSRFToken 을 확인한 후, 유효하지 않으면 403 Forbidden 을 클라이언트에게 넘겨준다
https://docs.djangoproject.com/en/3.1/ref/csrf/ 때문에, 과제번호 5,6,7 에 명시된 스펙인
로그인하지 않은 유저가 해당 API를 요청하면 403 FORBIDDEN처리해야 합니다.
은 따로 코드를 처리하지 않아도 된다request.user 로 user 를 받아올 수 있는 걸 보면 CSRFToken 이 유효한 유저인지 그렇지 않은지 확인해주는 것이지 않나???
하지만... 6번을 코드로 구현하고 난 뒤, 포스트맨으로 확인한 결과 200 OK 를 받았지만
뭔가 찝찝한 기분에 Send 를 계속 눌러보았습니다. 그래도 서버는 변함없이 200 OK 를 보내주었습니다.
로그아웃 한번 한 뒤 다시 요청을 보내면 200 OK 가 뜨면 안 되는 것 같은데... 분명 받은 Response 를 보면 Cookies 에서 sessionid 가 사라진 것을 보면 로그아웃 된 것도 갖긴 한데...
여기서부터 꽉 막혀버렸습니다. 조언을 구합니다.
읽어주셔서 감사합니다.