Python Django 给我 Forbidden (403) CSRF 验证失败。请求中止

问题描述 投票:0回答:2

Django 版本 = 2.2.2 使用 Google Chrome 时似乎会出现此问题。

我在所有表单标签中添加了 {% 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。 视图函数将请求传递给模板的渲染方法。 在模板中,每个针对内部 URL 的 POST 表单内都有一个 {% csrf_token %} 模板标记。 如果您不使用 CsrfViewMiddleware,则必须在使用 csrf_token 模板标记的任何视图以及接受 POST 数据的视图上使用 csrf_protect。 该表单具有有效的 CSRF 令牌。登录另一个浏览器选项卡或登录后点击后退按钮后,您可能需要使用表单重新加载页面,因为登录后令牌会轮换。 您看到此页面的帮助部分是因为您的 Django 设置文件中有 DEBUG = True。将其更改为 False,则仅显示初始错误消息。 您可以使用 CSRF_FAILURE_VIEW 设置自定义此页面。*

python django csrf
2个回答
1
投票

这是您面临的错误: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


0
投票

请确保这些行包含在您的设置文件中:

 CSRF_TRUSTED_ORIGINS = [
    'http://localhost:8000',
    '0.0.0.0',
    'http://*youripaddress*',   
    ]

ALLOWED_HOSTS = [
    'localhost',
    '0.0.0.0',
     http://*youripaddress*',
    ]

CORS_ORIGIN_WHITELIST = [
    'http://localhost:8000',
    '0.0.0.0',
     http://*youripaddress*',
    ]

默认情况下,Django 在生成项目时包含 ALLOWED_HOST 选项,但需要手动添加信任列表和白名单选项。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.