即使格式为403,也不会设置禁止CSRF cookie

杰伊杰伊

当我尝试登录django网站时,总是收到403 Forbidden CSRF cookie not set error。通过开发人员工具查看时,CSRF令牌位于表单响应中,但没有cookie。django.middleware.csrf.CsrfViewMiddleware在中间件中,并且正在使用standard django.contrib.auth.views.LoginView
这是我的模板:

{% extends 'base/formbase.html' %}

{% block title %}Login{% endblock title %}

{% block menuid %}menu-login{% endblock menuid %}

{% block submitname %}Login{% endblock submitname %}
{% block extra %}
<div class="alert alert-danger">
    <a href="{% url 'password_reset' %}"> Forgot Your Password? </a>
</div>
<div class="alert alert-secondary">
    Don't have an account? <a href="{% url 'signup' %}"> Sign Up! </a>
</div>
{% endblock extra %}

base / formbase.html:

{% extends 'base/base.html' %}

{% load crispy_forms_tags %}

{% block body %}
<div class="row justify-content-center">
    <div class="col-6">
        <div class="card">
            <div class="card-body">
                {% block form %}
                <h2>{% block title %}{% endblock title %}</h2>
                <form method="post" novalidate>
                    {% csrf_token %}
                    {{ form|crispy }}
                    <button type="submit" class="btn btn-primary">{% block submitname %}{% endblock submitname %}
                    </button>
                </form>
                {% endblock form %}
            </div>
            {% block extra %}{% endblock extra %}
        </div>
    </div>
</div>
{% endblock body %}

base / base.html:

<!DOCTYPE html>
{% load base_extra %}
<html lang="en">
<head>
    {% settings gamename "GAME_NAME" %}
    <meta charset="UTF-8">
    <title>{{ gamename }} - {% block title %}{% endblock title %}</title>
    {% block head %}{% endblock head %}


    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    {% settings debug "DEBUG" %}

    {% if debug %}
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/latest/css/bootstrap.css">

    <script src="https://code.jquery.com/jquery-latest.js"></script>

    <script src="https://unpkg.com/@popperjs/core/dist/umd/popper.js"></script>

    <script src="https://stackpath.bootstrapcdn.com/bootstrap/latest/js/bootstrap.js"></script>


    {% else %}
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">

    <script src="https://code.jquery.com/jquery-latest.min.js"></script>

    <script src="https://unpkg.com/@popperjs/core/dist/umd/popper.min.js"></script>

    <script src="https://stackpath.bootstrapcdn.com/bootstrap/latest/js/bootstrap.min.js"></script>

    {% endif %}

</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
    <a class="navbar-brand" href="{% url 'index' %}">{{ gamename }}</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item" id="menu-home">
                <a class="nav-link" href="{% url 'index' %}">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item" id="menu-gamelist">
                <a class="nav-link" href="{% url 'game:game_list' %}">Game List</a>
            </li>
            <li class="nav-item" id="menu-leaderboard">
                <a class="nav-link" href="{% url 'user_list' %}">Leaderboard</a>
            </li>
            {% if request.user.is_staff %}
            <li class="nav-item" id="menu-admin">
                <a class="nav-link" href="{% url 'admin:index' %}">Admin</a>
            </li>
            {% endif %}
        </ul>
        <!--
      <form class="form-inline my-2 my-lg-0">
        <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
      </form>
    -->
        <ul class="navbar-nav ml-auto">
            {% if request.user.is_authenticated %}
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown"
                   aria-haspopup="true" aria-expanded="false">
                    {{ request.user }}
                </a>
                <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                    <a class="dropdown-item" href="{% url 'user' user.pk %}">Profile</a>
                    <div class="dropdown-divider"></div>
                    <a class="dropdown-item" href="{% url 'logout' %}">Log out</a>
                </div>
            </li>
            <li class="nav-item">
                <div class="nav-link">${{ request.user.gameinfo.money }}</div>
            </li>
            {% else %}
            <li class="nav-item" id="menu-signup">
                <a class="nav-link" href="{% url 'signup' %}">Sign Up</a>
            </li>
            <li class="nav-item" id="menu-login">
                <a class="nav-link" href="{% url 'login' %}">Log In</a>
            </li>
            {% endif %}
        </ul>
    </div>
</nav>
<div class="mx-3 mt-2">
    <script>
try {
  document.getElementById("{% block menuid %} {% endblock menuid %}").classList.add("active");
}
catch {}
    </script>
    {% block body %}
    {% endblock body %}
</div>
</body>
</html>

添加@csrf_protect装饰器不能解决问题。

劳夫

如果您CSRF_COOKIE_SECURE = True 在文档中解释,或者如果您有CSRF_COOKIE_HTTPONLY = True 解释,或者您只想禁用csrf令牌,则可以将@csrf_exempt装饰器添加到视图中,这可能会发生

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django:禁止(未设置CSRF cookie。)

来自分类Dev

Django返回403错误-“未设置CSRF Cookie”

来自分类Dev

获取 Set-Cookie 标头以设置 CSRF Cookie 时避免 HTTP 403 错误的最佳方法

来自分类Dev

即使为子目录设置了php cookie,也为整个域设置了Cookie

来自分类Dev

Cookie不会设置到期时间

来自分类Dev

Django 1.9 AJAX表单CSRF令牌403错误-“未设置CSRF Cookie”

来自分类Dev

Python请求:禁止cookie

来自分类Dev

JWT + Cookie + HTTPS + CSRF

来自分类Dev

为移除的元素设置 cookie

来自分类Dev

hapi-auth-cookie未设置cookie

来自分类Dev

hapi-auth-cookie未设置cookie

来自分类Dev

python cookie 的奇怪行为,无法设置 cookie

来自分类Dev

Django CSRF cookie设置不正确

来自分类Dev

javascript cookie不会删除

来自分类Dev

Django不会删除Cookie

来自分类Dev

Cookie数据不会显示

来自分类Dev

jQuery cookie不会过期

来自分类Dev

设置了csrfmiddlewaretoken和csrftoken cookie的Ajax POST仍然被django 403禁止

来自分类Dev

设置Cookie路径JavaScript

来自分类Dev

如何设置Cookie值?

来自分类Dev

未设置本地Cookie

来自分类Dev

使用Javascript设置Cookie

来自分类Dev

快递未设置Cookie

来自分类Dev

设置Cookie选项

来自分类Dev

未设置安全Cookie

来自分类Dev

PHP设置HTTP Cookie

来自分类Dev

PHP:无法设置Cookie

来自分类Dev

设置Cookie过期时间。

来自分类Dev

设置Cookie网站