Ayuda
Razón dada por el fracaso:
Origin checking failed - https://praktikum6.jhoncena.repl.co does not match any trusted origins.
En general, esto puede ocurrir cuando hay una verdadera falsificación de solicitud entre sitios, o cuando el mecanismo CSRF de Django no se ha utilizado correctamente. Para los formularios POST, debe asegurarse de lo siguiente:
Your browser is accepting cookies. The view function passes a request to the template's render method. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data. The form has a valid CSRF token. After logging in in another browser tab or hitting the back button after a login, you may need to reload the page with the form, because the token is rotated after a login.
Está viendo la sección de ayuda de esta página porque tiene DEBUG = True en su archivo de configuración de Django. Cámbielo a Falso y solo se mostrará el mensaje de error inicial.
Puede personalizar esta página usando la configuración CSRF_FAILURE_VIEW.
Compruebe si está utilizando Django 4.0. Estaba usando 3.2 y tuve este descanso para la actualización a 4.0.
Si estás en 4.0, esta fue mi solución. Agregue esta línea a su settings.py
. Esto no era necesario cuando estaba usando 3.2 y ahora no puedo PUBLICAR un formulario que contenga un CSRF sin él.
CSRF_TRUSTED_ORIGINS = ['https://*.mydomain.com','https://*.127.0.0.1']
Revise esta línea para conocer los cambios necesarios, por ejemplo, si necesita cambiar https
por http
.
La causa raíz es la adición de la verificación del encabezado de origen en 4.0.
https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-orígenes-de-confianza
Cambiado en Django 4.0:
La verificación del encabezado de origen no se realiza en versiones anteriores.
Si su versión de django es "4.xx" :
python -m django --version // 4.xx
Entonces, si el error es como se muestra a continuación:
No se pudo verificar el origen: https://example.com no coincide con ningún origen confiable.
Agregue este código a "settings.py" :
CSRF_TRUSTED_ORIGINS = ['https://example.com']
En tu caso, tienes este error:
No se pudo verificar el origen: https://praktikum6.jhoncena.repl.co no coincide con ningún origen confiable.
Por lo tanto, debe agregar este código a su "settings.py" :
CSRF_TRUSTED_ORIGINS = ['https://praktikum6.jhoncena.repl.co']
Si, como yo, recibe este error cuando el origen y el host son el mismo dominio.
Podría ser porque:
settings.py
, por ejemplo SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
y/oproxy_set_header X-Forwarded-Proto https;
para Nginx.En este caso:
https://www.example.com
debido a 1.request.is_secure()
devuelve False
debido a 2, 3 y 4._origin_verified()
devuelve False
debido a la línea 285 de django.middleware.csrf (comparación de https://www.example.com
con http://www.example.com
): def _origin_verified(self, request): request_origin = request.META["HTTP_ORIGIN"] try: good_host = request.get_host() except DisallowedHost: pass else: good_origin = "%s://%s" % ( "https" if request.is_secure() else "http", good_host, ) if request_origin == good_origin: return True
¡Asegúrate de leer la advertencia en https://docs.djangoproject.com/en/4.0/ref/settings/#secure-proxy-ssl-header antes de cambiar esta configuración!