我想要的是将对django管理员登录页面的访问限制为仅超级用户。这意味着如果您不是超级用户,并尝试访问http://127.0.0.1:8000/admin
-应该将您重定向到404 page之类的东西。执行此身份验证的方式或自定义视图是挑战。请有人帮我提示如何做吗?
urlpatterns = [
path('admin/', my_custom_function,name="check_if_superuser"),
# when somebody hits this url pattern , he/she should be taken to the
# function above for checking if superuser befor being redirected to
# django admin login page
]
在我的views.py
中,我具有执行身份验证的以下功能
def my_custom_function(request):
if request.user.is_superuser():
#... redirect to django admin login page
else:
# return render(404_page)
是的。
答案 0 :(得分:1)
我认为在所描述的场景中可能存在捕获 22。
这两种情况在我看来都不一致。我认为您想要实现的目标是由 Django 框架以稍微不同的方式完成的。
has_permission()
中的 AdminSite
类中有 django.contrib.admin.sites
,其中
如果给定的 HttpRequest 有权查看管理站点中至少一个页面,则返回 True
并且默认返回 request.user.is_active and request.user.is_staff
如果您在 admin.py 中更改它,则只有活跃的超级用户才能使用 admin:
from django.contrib import admin
def has_superuser_permission(request):
return request.user.is_active and request.user.is_superuser
# Only active superuser can access root admin site (default)
admin.site.has_permission = has_superuser_permission
甚至非sup登录也会提示权限不足提示重新登录
答案 1 :(得分:0)
默认情况下,django admin仅允许超级用户或东西用户登录。因此,拥有管理员登录面板是一种安全的方法。另外,如果您想限制该登录路径,我认为最好在该特定路由上放置防火墙。这样,只有列入白名单的IP才能访问它。您可以为此使用NGINX,并且配置应如下所示:
location /admin {
# block one workstation
deny 192.168.1.1;
# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;
# drop rest of the world
deny all;
}
此article可能对配置有所帮助。