为 Django 管理员使用替代身份验证后端
Using an alternative authentication backend for Django admin
我在我的 Django 站点上使用 CAS 进行身份验证(通过 django-cas-ng)。如果我通过 CAS 登录然后访问管理站点,它工作正常,但如果我在未登录时访问管理站点,它会重定向到管理站点的登录表单而不是 CAS 登录页面。我怎样才能让它重定向到 CAS 登录页面?
我最终处理这个问题的方法是继承 AdminSite
并覆盖 admin_view
、login
和 logout
。 admin_view
现在不再将未经授权的用户重定向到管理界面的登录视图,而是将匿名用户重定向到 settings.LOGIN_URL
,并为经过身份验证的非员工用户引发 PermissionDenied
。 login
和 logout
现在只是重定向到 settings.LOGIN_URL
和 settings.LOGOUT_URL
.
我把我的代码用来做这个 on GitHub,并以 django-admin-external-auth
的名字将它上传到 PyPI,以防其他人需要解决这个问题。
将 'django_cas_ng.middleware.CASMiddleware'
添加到您的 MIDDLEWARE_CLASSES
会自动将用户重定向到 CAS 登录页面,而不是 django 管理员登录表单。
示例:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_cas_ng.middleware.CASMiddleware',
...
)
我在我的 Django 站点上使用 CAS 进行身份验证(通过 django-cas-ng)。如果我通过 CAS 登录然后访问管理站点,它工作正常,但如果我在未登录时访问管理站点,它会重定向到管理站点的登录表单而不是 CAS 登录页面。我怎样才能让它重定向到 CAS 登录页面?
我最终处理这个问题的方法是继承 AdminSite
并覆盖 admin_view
、login
和 logout
。 admin_view
现在不再将未经授权的用户重定向到管理界面的登录视图,而是将匿名用户重定向到 settings.LOGIN_URL
,并为经过身份验证的非员工用户引发 PermissionDenied
。 login
和 logout
现在只是重定向到 settings.LOGIN_URL
和 settings.LOGOUT_URL
.
我把我的代码用来做这个 on GitHub,并以 django-admin-external-auth
的名字将它上传到 PyPI,以防其他人需要解决这个问题。
将 'django_cas_ng.middleware.CASMiddleware'
添加到您的 MIDDLEWARE_CLASSES
会自动将用户重定向到 CAS 登录页面,而不是 django 管理员登录表单。
示例:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_cas_ng.middleware.CASMiddleware',
...
)