[英]Forbidden (403) CSRF verification failed. Request aborted using django
[英]Python Django giving me Forbidden (403) CSRF verification failed. Request aborted
Django Version = 2.2.2 这个问题似乎发生在使用谷歌浏览器上。
我在所有表单标签中添加了 {% csrf_token %},如下所示:
{% extends 'base.html' %}
{% block content %}
<form method="post">
{% csrf_token %} #-------------> here it is
{% for field in login_form %}
<p>
{{field.label_tag}}
{{field}}
{% if field.help_text %}
{field.help_text}}
{% endif %}
</p>
{% endfor %}
{% for field in login_form %}
{% for error in field.errors %}
<p>{{error}}</p>
{% endfor %}
{% endfor %}
{% if login_form.non_field_errors %}
<p>{{login_form.non_field_errors}}</p>
{% endif %}
<input type="submit" value="Login">
</form>
{% endblock content %}
但是当我实际尝试使用该表单登录并单击提交按钮时,它应该将我重定向到主页。 但是,它给了我以下错误消息:
*禁止 (403) CSRF 验证失败。 请求中止。 帮助 失败原因:CSRF 令牌丢失或不正确。
一般来说,当存在真正的跨站请求伪造,或者没有正确使用 Django 的 CSRF 机制时,就会出现这种情况。 对于 POST 表单,您需要确保: 您的浏览器正在接受 cookie。 视图函数将请求传递给模板的渲染方法。 在模板中,每个 POST 表单中都有一个 {% csrf_token %} 模板标记,其目标是内部 URL。 如果您没有使用 CsrfViewMiddleware,那么您必须在任何使用 csrf_token 模板标记的视图以及接受 POST 数据的视图上使用 csrf_protect。 该表单具有有效的 CSRF 令牌。 登录另一个浏览器选项卡或登录后点击后退按钮后,您可能需要使用表单重新加载页面,因为登录后令牌会旋转。 您看到此页面的帮助部分是因为您的 Django 设置文件中有 DEBUG = True。 将其更改为 False,将仅显示初始错误消息。 您可以使用 CSRF_FAILURE_VIEW 设置自定义此页面。*
这是您面临的错误: https : //docs.djangoproject.com/en/3.1/ref/csrf/#rejected-requests
您可以使用@csrf_exempt
装饰器来防止 csrf 错误,并且可以使用它完全删除{% csrf_token %}
。 检查这个: https : //docs.djangoproject.com/en/3.0/ref/csrf/#django.views.decorators.csrf.csrf_exempt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.