inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

안녕하세요!!!! 선생님 로그인에 관해 질문이 있습니다!!!

248

Han Kim

작성한 질문수 23

1

안녕하세요!!!!!!!!ㅎㅎ 이진석 선생님!!!!! 로그인에 관해 문제가 있어서 질문드립니다!!

로그인뷰를 그대로 urls.py에 불러와서 바로 사용하고있습니다!(따로user모델은 커스터마이징하지않았습니다!) 

근데 문제가 있는데 두개의 브라우저 창을 열어놓고 둘다 로그인창으로 띄어놓고  (같은 브라우저창입니다 똑같은걸 2개띄어논상태)

 

한브라우저에서 먼저 로그인을 하고 또 다른 브라우저 창에서(역시 로그인창이 띄어있습니다) 로그인을 하면 csrf_token 에러가 뜨는데 403 Forbidden 에러가뜹니다!

 

Help

Reason given for failure:

    CSRF token missing or incorrect.

 

제가 원하는 구현은 같은 브라우저는 이미 로그인이 되있으면 그냥 로그인에 창에 다시 로그인해도 정상적으로 페이지 넘어가게 만들고 싶습니다! (물론 같은 계정으로 로그인하며 에러없이!)

혹시 이럴경우 따로 처리하는 로직을 view에 넣어야할까요!??  (만일 csrf_exempt 사용하려면 어디에 오버라이딩 해야하는지 모르곘네용)

항상 친절한 답변 너무 감사드립니다!!!!!!!!ㅎㅎ

 

 

 

 

loginview docker django python react

답변 1

1

이진석

안녕하세요.

csrf_exempt 장식자는 뷰 함수를 감싸는 방식으로 적용하실 수 있습니다. 하지만 장고 Form을 처리하는 뷰에서는 csrf_exempt 장식자를 적용하지 않으셔야 합니다. 대개 API를 처리하는 뷰에서만 적용합니다. 이미 있는 보안기능을 절대 끄셔서는 안 됩니다.

로그인 페이지를 띄우신 첫번째 탭에서 로그인을 하시면 로그인을 처리하는 과정에서 세션/쿠키가 초기화되므로, 이미 띄우두신 두번째 탭의 로그인 폼에서의 csrf token은 유효하지 않은 값이 되어버립니다.

사용자 입장에서 이를 보다 깔끔하게 처리하실려면, 로그인 폼에서는 javascript로 ajax form submit를 하시어 403 응답에서는 현재 페이지를 js로 새로고침하시면

  1. 로그인 뷰에서는 GET 요청이고 이미 로그인 상황이라면 login redirect url주소로 redirect 처리해주실 수 있고
  2. 로그인 뷰에서는 로그인 상황이 아니라면, 새롭게 csrf token을 발급받을 테고 로그인 프로세스를 진행하실 수 있겠죠.

아래의 LoginView 구현을 보시면, redirect_authenticated_user = False 옵션이 지원되고 있네요. 이 옵션을 True로 지정하시면 로그인 상황에서 login redirect url로 이동을 시켜주네요.

관련 코드 : https://github.com/django/django/blob/3.0.14/django/contrib/auth/views.py#L48

화이팅입니다. :-)

안녕하세요.

0

62

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

282

1

useEffect 훅에서 else 유무에 따른 결과

0

221

1

useAxios 훅의 dependency array 설정

0

254

1

useEffect에서 변수 업데이트 관련 질문

0

388

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

273

1

bootstrap4

0

479

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

373

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

577

3

useState는 필수일까요?

0

269

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

606

4

Django allauth를 사용한 소셜 로그인 시 에러

0

657

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

561

2

useLocalStorage() 함수 사용여부

0

233

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

451

1

리듀서의 의미 재확인

0

435

1

simple-jwt Refresh Token 사용 노하우

0

903

2

docker compose 를 통한 배포 관련 오류 문의

0

683

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

369

1

is_like_user

0

237

1

related_name 오류

0

276

1

re_path 오류

0

263

1

re_path url

0

252

1

No post matches the given query

0

667

2