Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何禁用Django';s在代理后提供CSRF保护_Python_Django_Proxy_Django Admin_Django Authentication - Fatal编程技术网

Python 如何禁用Django';s在代理后提供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

我需要在代理后面运行一个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保护:

  • 我在中间件类的settings.py中注释掉了CsrfViewMiddleware
  • 我创建了一个disable.py并将其disableCSRF类添加到中间件类中(实际上我尝试了每个[!]位置),如本网站上所述(问题/1785772)

  • 我创建了一个disable.py并将其disableCSRF类添加到中间件类中(我再次尝试了每个位置),如本文中提到的:

  • 我试图在django/middleware/csrf.py中对Csfr保护机制进行注释,但我发现第190行的相关部分与本网站上提到的第160行不同:questions/1650941/

  • 上面提到的事情都不管用。当我尝试通过/admin登录时,总是会出现403错误

    如何在Alfred上禁用CSRF保护?是否可以只为/admin禁用它?我更希望我能通过一个中间件来实现这一点,如2所述。三,。而不是通过在源代码中注释某些内容,如4。如果有一个中间件的方式,这将是伟大的


    提前感谢!:)

    您可以在视图函数上使用@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)