Django Nginx密码验证不断提示输入密码

Django Nginx密码验证不断提示输入密码,django,authentication,nginx,uwsgi,Django,Authentication,Nginx,Uwsgi,我想上传我网站的一个开发分支,这样我就可以向客户展示它,并在尽可能接近生产的环境中进行测试(代码可能还没有准备好生产)。因此,我想密码保护这个网站 我正在使用Django开发一个网站,并使用nginx为该网站提供服务(使用uWsgi)。我成功地通过应用以下指令获得密码提示: auth_basic "Restricted Content"; # also tried "Private Property" auth_basic_user_file /etc/nginx/.htpasswd; 但问

我想上传我网站的一个开发分支,这样我就可以向客户展示它,并在尽可能接近生产的环境中进行测试(代码可能还没有准备好生产)。因此,我想密码保护这个网站

我正在使用Django开发一个网站,并使用nginx为该网站提供服务(使用uWsgi)。我成功地通过应用以下指令获得密码提示:

auth_basic "Restricted Content";  # also tried "Private Property"
auth_basic_user_file /etc/nginx/.htpasswd;
但问题是,在正确输入第一个密码后,它会再次提示我输入用户和密码;好像每个API调用都需要经过身份验证

我想问题可能出在我的配置文件上,所以这里是我的site.conf文件:

server {
    listen 80;
    server_name panel.mysite.dev;
    root /path/to/my/app/front/dist;

    ### I've also tried 'auth_basic' here

    location / {

        root /path/to/my/app/front/dist;
        index index.html;

        auth_basic "Private Property";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
    location /media {
        rewrite ^(.*)$ http://media.mysite.dev$1;
    }
    location /static {
        rewrite ^(.*)$ http://static.mysite.dev$1;
    }

}

server {
    listen 80;
    server_name api.mysite.dev;

    ### I've also tried 'auth_basic' here

    location /api {
        client_max_body_size 25m;
        uwsgi_pass unix:/tmp/api.mysite.dev.sock;
        include /path/to/my/app/back/uwsgi_params;
    }

}
server {
    listen 80;
    server_name media.mysite.dev;
    root /path/to/my/app/media;
    add_header 'Access-Control-Allow-Origin' '.*\.mysite\.[com|dev]';

    location / {
        root /path/to/my/app/media;
    }
}
server {
    listen 80;
    server_name static.mysite.dev;
    root /path/to/my/app/static;
    if ($http_origin ~* (https?://.*\.mysite\.[com|dev](:[0-9]+)?)) {
        set $cors "true";
    }
    location / {
        if ($cors = "true") {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
        }
    }
}
我的问题是:是否有任何方法可以在输入密码后记住密码,并允许经过身份验证的用户轻松导航?还是我遗漏了一些琐碎的东西

编辑: 在my django
settings.py
中:

AUTHENTICATION_BACKENDS = (
    'oauth2_provider.backends.OAuth2Backend',
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)
...
REST_FRAMEWORK = {
    ...
    DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'oauth2_provider.ext.rest_framework.OAuth2Authentication',
    ),

事先非常感谢。任何帮助都将不胜感激

基本身份验证使用
授权
头传输用户和密码。Django休息。Nginx,所以如果您尝试同时登录和使用令牌身份验证,那么事情就会破裂


不需要更改Django应用程序的解决方案是在nginx中使用另一种身份验证方式,例如,或者,您可以使用来检查签名会话cookie是否已设置/有效,或者请求IP是否在(临时)白名单中,否则,请将用户重定向到具有登录表单的页面。

您的Django站点是否也使用HTTP身份验证,但使用不同的用户和密码?(我这么问是因为你写了“API调用”;Django REST框架支持)。我不这么认为,但我不确定。我接受
TokenAuthentication
OAuth2Authentication
(我编辑了问题,添加了与身份验证相关的设置,以防有帮助)。是这样吗?或者我可以限制django配置中的所有请求(而不仅仅是那些需要身份验证的请求(我使用django Rest框架处理这些请求),但是,考虑到我根本不想让网站暴露出来,这就是你的冲突:基本HTTP身份验证和
TokenAuthentication
都使用
Authorization
头,如果他们看到另一个的头,他们都会抱怨(从他们的角度来看,这是无效的).SessionAuthentication是一个选项吗?我会说不,因为我已经在生产中使用它了。但是,由于对该开发服务器的访问将受到限制,我想我可以更改设置。很好。我会尝试一下,然后再与您联系!^我认为这是有史以来最好的答案,为我节省了大量调试客户端证书的时间!