Al abrir una aplicación Django 1.10 en una segunda pestaña del navegador, se actualiza el token CSRF. Esto rompe todos los formularios en la primera pestaña, es decir, los formularios abiertos anteriormente ya no se pueden enviar porque el antiguo token CSRF ahora no es válido.
¿Cómo evito este comportamiento?
Ejemplo paso a paso:
Algunos detalles:
Realmente me gustaría permitir la navegación en varias pestañas en la aplicación.
Las notas de la versión de Django 1.10 documentan un cambio en el mecanismo CSRF:
Para protegerse contra los ataques de BREACH, el mecanismo de protección CSRF ahora cambia el valor del token de formulario en cada solicitud (mientras mantiene un secreto invariable que se puede usar para validar los diferentes tokens).
La documentación CSRF 1.9 de Django tiene una muy buena descripción del problema de usabilidad. Este párrafo se eliminó en la documentación de 1.10 CSRF , pero parece describir el problema exacto que estoy encontrando:
¿Por qué no usar un nuevo token para cada solicitud?
Generar un nuevo token para cada solicitud es problemático desde la perspectiva de la interfaz de usuario porque invalida todos los formularios anteriores. La mayoría de los usuarios se sentirían muy descontentos al descubrir que abrir una nueva pestaña en su sitio ha invalidado el formulario que acababan de llenar en otra pestaña o que no se pudo completar un formulario al que accedieron a través del botón Atrás.
Si está usando el decorador @csrf_protect en sus vistas, intente usar el decorador @csrf_exempt en su lugar.
Antes de views.py :
from django.views.decorators.csrf import csrf_protect @csrf_protect def view(request): # Render SomethingDespués de vistas.py :
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def view(request): # Render SomethingLo siento por la respuesta tardía. Más vale tarde que nunca, espero.