django - 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?
解决方案
经过大量搜索和Alasdair的回答后,找到的唯一解决方案是强制中间件生成相同的令牌。
这种方法仅在我的开发特定情况下有效。
去:
lib/python3.5/site-packages/django/middleware
编辑文件
csrf.py
编辑方法的定义:
def _get_token(self, request):
在任何其他说明之前,用您的令牌写一个回报:
def _get_token(self, request):
return "1234567890123456789012345678901234567890123456789012345678901234"
推荐阅读
- php - 尝试使用类方法返回单行数据。只返回主键的值
- csv - 将空字符串读取为 Null Athena
- linux - 当输出文件超过一定数量时创建新文件的 Bash 脚本。行数
- java - java 通用问题。为什么会这样?
- javascript - Keydown 有延迟
- regex - 用 vscode 替换片段中的和大写
- javascript - 如何使用javascript查找具有属性的元素
- javascript - 如何跟踪抛出 JS 错误的位置,而不是创建位置
- python - DeprecationWarning: BaseException 错误导致备份失败
- cross-domain - 如何修复来自 Klarna iframe 的跨域错误