【发布时间】:2016-03-17 09:03:36
【问题描述】:
更新:从 Nginx 配置中删除了 set_header 令牌。意识到这对问题没有帮助。我觉得问题在于 Django 没有获得正确的标头,并且它们在某个地方“丢失”了。
我正在尝试为一个秘密圣诞老人项目创建一个 REST api。我已将其设置为必须先对用户进行身份验证,然后才能进行某些调用。这在我的本地机器上运行良好,但在任何地方托管时似乎都不起作用。
我已经在 Heroku 和 ubuntu 服务器上尝试过。但是,我更愿意让它在 Ubuntu 服务器上运行。我正在使用 gunicorn 和 nginx 为应用程序提供服务,但在所有需要身份验证的调用中,我都收到“未提供身份验证凭据”。我正在使用 TokenAuthentication 并在 Authorization 标头中使用前缀 Token 传递我的令牌。
非常感谢任何帮助。
settings.py
REST_FRAMEWORK = {
'PAGINATE_BY': 30,
'PAGINATE_BY_PARAM': 'per_page',
'MAX_PAGINATE_BY': 1000,
"DATETIME_FORMAT": "%Y-%m-%dT%H:%M:%S%z",
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
}
views.py
class RoomViewSet(mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
"""
Creates, Updates, and retrives Rooms
"""
queryset = Room.objects.all()
serializer_class = RoomSerializer
permission_classes = (IsAuthenticated, )
lookup_field = 'slug'
gunicorn.conf
description "Gunicorn application server handling myproject"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid dannywilson
setgid www-data
chdir /storage/sites/secret_santa/
exec santa/bin/gunicorn --pythonpath="$PWD/secret_santa" --bind=unix:"$PWD/secret_santa/gunicorn.sock" wsgi:application
nginx 配置
upstream test_server {
server unix:/storage/sites/secret_santa/secret_santa/gunicorn.sock;
}
server {
listen 80;
server_name webaddress;
access_log /storage/sites/_logs/secret_santa_api/nginx-access.log;
error_log /storage/sites/_logs/secret_santa_api/nginx-error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_ignore_headers Cache-Control Expires Pragma;
if (!-f $request_filename) {
proxy_pass http://test_server;
break;
}
}
}
【问题讨论】:
-
您发送的具体标头是什么?
-
只是一个带有 Token 的 Authorization 标头
-
你给标题起什么名字?
-
授权,因为这是在 localhost 上起作用的。
-
尝试发送 WWW-Authenticate
标签: python django nginx django-rest-framework gunicorn