【发布时间】:2011-01-25 09:44:40
【问题描述】:
我需要在代理后面运行一个 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 行附近:问题/1650941/
上面提到的所有事情都不起作用。当我尝试通过 /admin 登录时总是收到 403 错误
如何禁用 Alfred 的 CSRF 保护?是否可以只为 /admin 禁用它?我希望我可以通过 2. 和 3. 中提到的中间件来做到这一点,而不是像 4. 中那样在源代码中注释掉一些东西。如果有中间件方式那就太好了。
提前致谢! :)
【问题讨论】:
标签: python django proxy django-admin django-authentication