2012-01-22 5 views
9

일부 인증 동작을 검사하는 테스트가 있습니다. 이 테스트에서 나는 내가 True에 테스트 클라이언트에게 enforce_csrf_checks 세트를 사용하고, 명시 적으로 CSRF 동작을 확인해야합니다테스트 할 때 수동으로 CSRF 토큰 받기

self.csrf_client = Client(enforce_csrf_checks=True) 

내 질문은 수동으로 보낼 CSRF 토큰을 얻기 위해 나를 위해 간단한 방법은 무엇 그 클라이언트에게 보낼 POST 요청?

csrf(request)을 반환하는 사용자 정의 테스트보기를 정의하고, 해당보기에 요청하고, CSRF 토큰을 추출한 다음 POST 요청에 사용하는 것이 가장 좋은 방법입니까 아니면 CSRF 토큰을 얻을 수있는 쉬운 방법이 있습니까? 사용?

+0

혹시 이것에 대한 해결책을 찾았나요? 셀레늄 테스트를 위해 csrftoken 쿠키를 설정하기 위해 csrf 토큰에 유사한 문제가 발생했습니다. –

답변

11

나는 이것이 오래된 질문이라는 것을 알고있다. 그러나 나는 해결책을 찾고있는 동안 우연히 마주 쳤다. 그리고 다른 누군가가 이것에 문제가있을 때를 대비하여 나의 해결책을 공유하고 싶었다.

CSRF 토큰

는 로그인 후 실제로 쿠키에 저장하고 난 다음을 수행했다 액세스 할 수 :

self.client = Client(enforce_csrf_checks=True) 
self.client.login(username='temporary', password='temporary') 
self.client.get("/url_to_the_form/") 
csrf_token = self.client.cookies['csrftoken'].value 
1

CSRF 토큰은 쿠키 (이름 : "csrftoken")로 클라이언트에 보내야합니다. 클라이언트는 추가 요청으로 해당 쿠키를 보내야합니다. Client 쿠키를 필요한 곳에 복사 할 수 있습니까?

+0

기본적으로'csrftoken'입니다 –

+2

답을 고맙게 생각하지만 정말로 그 질문에 답을하지는 못합니다. 'django.middleware.csrf.get_token()'과 같은 것을 사용하여보기를 건드리지 않고 자동으로 토큰을 생성 할 수있는 방법이 있는지 더 많이 찾고있었습니다. –

+0

나를 도울 수있는 정보가 충분하지 않습니다. 이것은 아마도 여러분의 단위 테스트 프레임 워크에 대한 완전한 이해가 없기 때문에 테스트가 어떻게 작동하고 테스터가 액세스 할 수 있는지에 대한 누락 된 세부 사항을 추론 할 수 없기 때문일 수 있습니다. –