我需要在代理后面运行一个 Django 系统(我们称之为 Alfred)。两者都在同一个网络上。作为代理,我使用 yuri vandermeer 的 django-httpproxy。(见他的页面 yvandermeer.net)
运行 Django 版本 1.2.4 的两个系统
两个系统都在同一个(封闭的)网络中,并且在同一个 IP 上。我的代理在端口 8000 上运行,Alfred 在端口 1337 上运行。我需要使用他的 /admin 站点登录到 Alfred,这是 Django 默认提供的(我已启用)。这是通过端口 1337 工作的,但我需要通过端口 8000 访问它。
当我尝试它时,Alfred 抛出了一个 403 CSRF 错误并告诉我我实际上就像一个中间人( - 当它这么说时,Alfred 是完全正确的)。
我尝试了几件事来禁用 Alfreds CSRF 保护:
- 我在 MIDDLEWARE_CLASSES 的 settings.py 中注释掉了 CsrfViewMiddleware
我创建了一个 disable.py 并将其 disableCSRF 类添加到 MIDDLEWARE CLASSES (实际上我尝试了每个 [!] 位置),就像本网站上提到的那样(questions/1785772)
#disable.py class DisableCSRF(object): def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True)
我创建了一个 disable.py 并将它的 disableCSRF 类添加到 MIDDLEWARE CLASSES 中(我再次尝试了每个位置),就像这里的其他帖子中提到的那样:http: //hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html
#disable.py class DisableCSRF(object): def process_view(self, request, callback, callback_args, callback_kwargs): setattr(request, '_dont_enforce_csrf_checks', True)
我试图在 django/middleware/csrf.py 中注释掉 Csfr 保护机制,但我发现第 190 行周围的相关部分而不是第 160 行周围的相关部分,如本网站所述:questions/1650941/
提到的所有事情都没有奏效。当我尝试通过 /admin 登录时,总是收到 403 错误
如何禁用 Alfred 的 CSRF 保护?是否可以只为 /admin 禁用它?如果我可以通过 2. 和 3. 中提到的中间件来做到这一点,而不是像 4. 中那样在源代码中注释掉一些东西,我更愿意这样做。如果有一个中间件方式那就太好了。
提前致谢!:)