EMswan 2023-03-10 20:28 采纳率: 0%
浏览 39

Forbidden (CSRF cookie not set.)

项目是Django4+Vue2,遇到Forbidden (CSRF cookie not set.): /login/,目前已经采取的网上的注释掉'django.middleware.csrf.CsrfViewMiddleware'和使用 @csrf_exempt 来进行处理,但是都没有解决该问题,求帮助。

img

  • 写回答

2条回答 默认 最新

  • 叶秋学长 优质创作者: 编程框架技术领域 2023-03-10 22:07
    关注

    这个错误表明Django的CSRF保护机制没有正确启用。注释掉中间件或使用@csrf_exempt是不推荐的解决方法,因为这会降低Web应用程序的安全性。

    要解决此问题,可以采取以下步骤:

    确保在Vue前端请求Django后端时,在请求头部添加"X-CSRFToken"键值对,值为浏览器cookie中的"csrftoken"。例如:

    javascript
    axios.post('http://localhost:8000/api/login/', {
        username: 'example',
        password: 'password'
    }, {
        headers: {
            'X-CSRFToken': 'csrftoken value from browser cookie'
        }
    })
    在Django后端视图函数中使用模板渲染(即通过render()返回html)时,确保包含{% csrf_token %}标签。例如:
    html
    <!DOCTYPE html>
    <html>
    <head>
        <title>Login Page</title>
    </head>
    <body>
        <form method="post">
            {% csrf_token %}
            <input type="text" name="username">
            <input type="password" name="password">
            <button type="submit">Login</button>
        </form>
    </body>
    </html>
    
    
    

    注意:如果您使用的是Django Rest Framework,则需要在前端请求中添加上述的"X-CSRFToken"键值对,并在后端视图函数中使用@api_view装饰器和serializer_class定义视图和序列化器等组件。另外,如果您使用的是Vue.js框架,可以考虑使用vue-cookies插件来获取和设置浏览器cookie中的csrftoken。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日