incorrect - La verificación de CSRF falló. Solicitud abortada en django
csrf_token django (5)
Estoy siguiendo el desarrollo web de Django 1.3. y para los inicios de sesión, recibo el siguiente error
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
Esta es mi settings.py APPS incluidas. Es exactamente como el libro dice que debería ser.
INSTALLED_APPS = (
''django.contrib.auth'',
''django.contrib.contenttypes'',
''django.contrib.sessions'',
''django.contrib.sites'',
''django.contrib.messages'',
''django.contrib.staticfiles'',
# Uncomment the next line to enable the admin:
''django.contrib.admin'',
# Uncomment the next line to enable admin documentation:
# ''django.contrib.admindocs'',
''djangocricket.Cricket'',
''djangocricket.cms''
)
El libro dice que debe contener django.contrib.auth.views.login ... y lo incluyo en
urlpatterns = patterns('''',
# Examples:
url(r''^$'', ''djangocricket.Cricket.views.index'', name=''default''),
url(r''^user/(/w+)/$'', ''djangocricket.Cricket.views.user_home'', name=''user home''),
url(r''^login/$'', ''django.contrib.auth.views.login''),
# url(r''^djangocricket/'', include(''djangocricket.foo.urls'')),
# Uncomment the admin/doc line below to enable admin documentation:
#url(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')),
# Uncomment the next line to enable the admin:
url(r''^news/'', ''djangocricket.cms.views.index'', name=''index''),
#url(r''^news/(?P<slug>[^/.]+).html'', ''djangocricket.cms.views.detail'', name=''get_single_news_item''),
url(r''^admin/'', include(admin.site.urls)),
)
y mi registration / login.html ... copia pegada del libro. debería hacer.
<html>
<head>
<title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password didn''t match.
Please try again.</p>
{% endif %}
<form method="post" action=".">
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
</body>
</html>
¿Qué me estoy perdiendo?
Hola, simplemente use {% csrf_token%} dentro de su formulario. Esto funcionó para mí. Entonces, ¿por qué usamos la falsificación solicitada en Cross-site? Bueno, la respuesta es bastante simple: acaba de agregar otra capa de seguridad a su página web, mediante la cual cualquier usuario malintencionado no puede validar una solicitud utilizando un token equivocado.
Si usa la etiqueta de la plantilla csrf_token
pero no cambia nada, verifique la configuración CSRF_COOKIE_DOMAIN
. Debería establecer None
en el entorno de desarrollo.
Solo quería dar información adicional sobre el tema. Si alguna vez le sucede a usted y está seguro de que el token se inyectó en el formulario y las funciones de vista lo están manejando todo correctamente, el problema persiste. Asegúrese de que no haya código javascript que deshabilite los campos de entrada. Me sucedió, después de varias horas de depuración, finalmente me di cuenta de eso.
<input type="hidden" name="csrfmiddlewaretoken" value="pHK2CZzBB323BM2Nq7DE2sxnQoBG1jPl" disabled="">
Yo tuve el mismo problema. Resolví este problema cuando agregué el {% csrf_token%}. Finalmente mi código es este:
<form id=''formulario2'' method=''post'' action=''>
<h3>Enter:</h3>
{% csrf_token %}
<input id="id_mesaje" name="mesaje" type="email" placeholder="E-mail"/>
<input type=''submit'' name="boton2" value=''Suscribete'' style="display:inline-block;background-color: #80e174; "/>
</form>
{% csrf_token %}
agregar la etiqueta de plantilla {% csrf_token %}
como elemento secundario del elemento de form
en su plantilla de Django.
De esta forma, la plantilla representará un elemento oculto con el valor establecido en el token CSRF. Cuando el servidor de Django recibe la solicitud de formulario, Django verificará que el token coincida con el valor que se procesó en el formulario. Esto es necesario para garantizar que las solicitudes POST (es decir, las solicitudes que alteran los datos) se originen en una sesión de cliente auténtica.
Para obtener más información, consulte la documentación de Django en: https://docs.djangoproject.com/en/dev/ref/csrf/
Aquí hay una descripción general del ataque de falsificación de solicitudes entre sitios: https://www.owasp.org/index.php/CSRF