Python 如何禁用Django';s在代理后提供CSRF保护
我需要在代理后面运行一个Django系统(我们称之为Alfred)。两者都在同一个网络上。作为代理,我使用yuri vandermeer的django httpproxy。(见他的网页yvandermeer.net) 两个系统都运行Django 1.2.4版 这两个系统位于同一(封闭)网络中,也位于同一IP上。我在8000端口上运行代理,在1337端口上运行Alfred。我需要使用Alfred的/admin站点登录到Alfred,Django默认提供了该站点(我已经启用了该站点)。这是通过端口1337工作,但我需要通过端口8000访问它 当我尝试的时候,阿尔弗雷德抛出了一个403的CSRF错误,告诉我我实际上有点像一个中间人(阿尔弗雷德这样说是完全正确的) 我尝试了几种方法来禁用Alfreds CSRF保护:Python 如何禁用Django';s在代理后提供CSRF保护,python,django,proxy,django-admin,django-authentication,Python,Django,Proxy,Django Admin,Django Authentication,我需要在代理后面运行一个Django系统(我们称之为Alfred)。两者都在同一个网络上。作为代理,我使用yuri vandermeer的django httpproxy。(见他的网页yvandermeer.net) 两个系统都运行Django 1.2.4版 这两个系统位于同一(封闭)网络中,也位于同一IP上。我在8000端口上运行代理,在1337端口上运行Alfred。我需要使用Alfred的/admin站点登录到Alfred,Django默认提供了该站点(我已经启用了该站点)。这是通过端口1
提前感谢!:) 您可以在视图函数上使用@csrf\u豁免装饰符来禁用该视图的csrf。
见故障完全在我这边。通过检查服务器日志,我意识到不是Alfred抛出了错误,而是代理(django httpproxy)。可能是因为这两台服务器都在localhost上运行,而且我也在从localhost发送请求。我为Proxy和Alfred禁用了CSRF。 有了这个设置,我再也不会收到任何403错误了 不幸的是,django httpproxy丢失了cookies,因此我无法登录
经验教训:不要将django httpproxy用作反向代理。因为我不想在后面的系统中更改django.contrib.auth中的代码,所以这不是一个选项。对你来说可能是个更好的选择。它不会丢失cookie信息,并且更易于配置和使用。
#disable.py
class DisableCSRF(object):
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
#disable.py
class DisableCSRF(object):
def process_view(self, request, callback, callback_args, callback_kwargs):
setattr(request, '_dont_enforce_csrf_checks', True)