我想上传一个我的网站的开发分支,这样我就可以把它展示给客户,并在尽可能接近生产的环境下进行testing(代码可能没有准备好进行生产)。 因此我想密码保护这个网站。
我正在开发一个使用Django的网站,并使用nginx来为网站提供服务(使用uWsgi)。 我设法得到提示input密码应用以下指令:
auth_basic "Restricted Content"; # also tried "Private Property" auth_basic_user_file /etc/nginx/.htpasswd;
但问题是,正确input第一个密码后,会再次提示我input用户名和密码; 就好像每个API调用都需要被authentication一样。
我认为这个问题可能与我的configuration文件,所以这里是我的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"; } } }
我的问题:是否有任何方法可以记住密码一旦进入,并允许通过身份validation的用户轻松导航? 还是我错过了一些微不足道的东西?
编辑:在我的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', ),
非常感谢你提前。 任何帮助将非常感激
基本身份验证使用Authorization
标头来传输用户和密码。 Django REST 也在TokenAuthentication
验证后端中使用这个头文件 。 Nginx 不支持多个Authorization
标题 ,所以如果你尝试登录并同时使用Token认证,事情就会中断。
不需要修改Django应用程序的解决方案就是在nginx中使用另一种认证方式,例如客户端证书 ,或者,可以使用ngx_http_auth_request_module
来检查签名会话cookie是否设置/有效,或者请求IP是否在(临时)白名单,并将用户重定向到具有登录表单的页面。