首页 > 解决方案 > Django 2.1 - CSRFToken 更改

问题描述

我在将我的 DJANGO 应用程序从 1.11 迁移到 2.1 时遇到问题

在开发过程中,我在端口 3000 上有一个 node.js 服务器(前端),在 8000 上有一个 DJANGO 开发服务器。前端使 Ajax 调用受 CSRFtoken 保护。

我有一个使用 @ensure_csrf_cookie 装饰器在前面调用的视图。

第一次我通常不得不去 chrome://net-internals/#events 启动前端,获取从服务器返回的 csrftoken 值,然后创建相关 cookie。不幸的是,cookie 不会使用此配置自动创建。

问题是。即使在完全刷新之后,Django 1.11 也会生成相同的 CSRFToken,因此在第一次之后,cookie 将等于生成的令牌。Django 2.1 每次都会更改 csrftoken,所以我无法创建 cookie,因为它总是等于以前的值。

为什么即使默认持续时间是 1 年,Django 2.1 也会更改 csrftoken?

标签: django

解决方案


经过大量搜索和Alasdair的回答后,找到的唯一解决方案是强制中间件生成相同的令牌。

这种方法仅在我的开发特定情况下有效。

去:

lib/python3.5/site-packages/django/middleware

编辑文件

csrf.py

编辑方法的定义:

def _get_token(self, request):

在任何其他说明之前,用您的令牌写一个回报:

def _get_token(self, request):
        return "1234567890123456789012345678901234567890123456789012345678901234"

推荐阅读