【发布时间】:2021-02-18 12:46:51
【问题描述】:
在尝试创建基于 Django Rest Framework 的 Web 应用程序时,我们遇到了以下问题:我们的整个应用程序应该并且受到 settings.py 的保护:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication'
),
但是对于一个单一的路由(它为前端代码生成提供架构),我们希望有基本的身份验证(test:test@host/special_route)。这个想法是像here一样添加到nginx的路由。我们的 nginx 配置如下所示:
server {
...
location /special_route {
auth_basic "API Schema";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
现在访问此路由时,会显示身份验证弹出窗口并验证密码和用户名,但成功时会显示 404。删除这段代码时,它会显示没有 404,所以我猜这不是 Django 问题。
我尝试向 auth 类添加基本身份验证,重新加载并重新启动服务器并更改 special_route 以避免拼写错误。我什至实验性地删除了该位置并将配置应用于整个服务器,它按预期工作。
【问题讨论】:
-
是
special_route你的 django 应用程序的一部分吗?在您的location块中没有proxy_pass或类似的指令,也许您忽略了它?理解你想要发生的事情有点困难。 -
阅读this问题和我在下面的评论。
-
@Andrew Backer 感谢您的快速回复!是的,特殊路由是 Django 应用程序的一部分,整个服务器配置都有一个有效的代理通道,所以我把它省略了。
-
@Ivan Wow,这看起来很相似,我明天会检查这个配置!感谢您的回复。
-
你们俩都是对的,proxy_pass (...) 不是从上面的服务器配置继承的,它与 location / 一起用于配置。你们有人想在这里创建答案还是我应该删除问题?
标签: django nginx django-rest-framework