django rest框架在nginx后面给出403而不是直接

Lud*_*udo 7 django nginx django-rest-framework

使用django-rest-framework.我在nginx后面的生产中运行时遇到HTTP 403错误.当我调用从APIView继承以支持GET操作的特定视图时,我得到:

{"detail": "Invalid username/password"}
Run Code Online (Sandbox Code Playgroud)

但是......我只能在浏览器中看到这个.当我使用curl获取相同的URL时,我不明白.我是否在Chrome和Firefox中直接点击URL或通过AJAX加载URL时出现此错误.

如果我首先通过管理员帐户通过Django Admin登录,我不会收到错误.

另外,我只是得到这个是我从nginx后面运行.如果我使用Django dev服务器或gunicorn运行,并直接点击端口,我很好,并且可以愉快地匿名访问该URL.如果我然后把nginx放在这个前面,转发到同一个gunicorn/runserver我得到这个错误.

也许这与我的nginx proxy_pass设置有关?

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)

我正在运行django rest framework 2.2.6,Django 1.5和nginx 1.2.7.

我在休息框架中将限制设置为一个愚蠢的高数字,并查看默认情况下所有似乎都打开的权限(但也明确设置).

谁能指出我正确的方向?

谢谢!

卢多.

Sjo*_*erd 25

就我而言,我在Apache中配置了HTTP基本身份验证,但在我的Django项目中没有.因为请求有身份验证标头,Django应用程序认为我想用它进行身份验证.我使用以下设置在Django REST框架中禁用了身份验证:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': []
}
Run Code Online (Sandbox Code Playgroud)


cat*_*ine 0

如果启用了限制,您将收到 403 FORBIDDEN。基于这个问题:https://github.com/tomchristie/django-rest-framework/issues/667,关闭 request.user/request.auth 的惰性评估可能是最好的选择。