2012-01-22 21 views
9

Tengo una prueba donde estoy comprobando algún comportamiento de autenticación. En esta prueba que necesito para comprobar explícitamente el comportamiento CSRF, así que estoy usando un cliente de prueba enforce_csrf_checks conjunto de True:Obtener manualmente un token CSRF al probar

self.csrf_client = Client(enforce_csrf_checks=True) 

Mi pregunta es, ¿cuál es la forma más sencilla para que consiga manualmente un token CSRF enviar con ¿una solicitud POST que le haré a ese cliente?

Es la mejor opción para definir una vista de prueba personalizada que devuelve csrf(request), hacer una solicitud a esa vista, extraer el token CSRF y luego usarlo en la solicitud POST, o hay alguna forma más fácil de obtener una ficha CSRF ¿usar?

+0

¿Alguna vez encontrar una solución para esto? Estoy teniendo un problema similar al token de csrf con el fin de establecer la cookie csrftoken para una prueba de selenio. –

Respuesta

11

Sé que esta es una vieja pregunta, pero me encontré con esto mientras buscaba una solución y ahora quería compartir mi solución en caso de que alguien más tenga un problema con esto.

El token CSRF se almacena en la cookie de hecho despues de hacer login y acceder a ella tenía que hacer lo siguiente:

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

El token CSRF debe enviarse al cliente como una cookie (llamada "csrftoken"). Se espera que el cliente envíe esa cookie de vuelta con más solicitudes. ¿Podría su Client copiar la cookie donde la necesita?

+0

Es 'csrftoken' de manera predeterminada –

+2

. Aprecia la respuesta, pero no responde la pregunta realmente. Estaba buscando más si hubiera alguna forma de poder generar el token automágicamente, sin tener que tocar una vista, tal vez usando algo como 'django.middleware.csrf.get_token()'. –

+0

No hay información suficiente para ayudarme más. Probablemente esto se deba a que no entiendo completamente su marco de pruebas unitarias y, por lo tanto, no puedo inferir los detalles que faltan sobre cómo funcionan las pruebas y a qué puede acceder el verificador. –