为 Django 管理员使用替代身份验证后端

Using an alternative authentication backend for Django admin

我在我的 Django 站点上使用 CAS 进行身份验证(通过 django-cas-ng)。如果我通过 CAS 登录然后访问管理站点,它工作正常,但如果我在未登录时访问管理站点,它会重定向到管理站点的登录表单而不是 CAS 登录页面。我怎样才能让它重定向到 CAS 登录页面?

我最终处理这个问题的方法是继承 AdminSite 并覆盖 admin_viewloginlogoutadmin_view 现在不再将未经授权的用户重定向到管理界面的登录视图,而是将匿名用户重定向到 settings.LOGIN_URL,并为经过身份验证的非员工用户引发 PermissionDeniedloginlogout 现在只是重定向到 settings.LOGIN_URLsettings.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',
    ...
)