Django 身份验证 - 如果 LDAP 身份验证失败,则不要继续 ModelBackend

Django authentication - don’t continue to ModelBackend if LDAP auth fails

我对真实用户使用django_ldap_auth的LDAPBackend,对功能用户使用Django的ModelBackend。但是,LDAPBackend 会为每个能够登录的人创建一个 Django 用户,我可以在 Django 数据库中为该用户设置密码。

问题是,如果用户的 LDAP 身份验证失败,但对 Django 数据库成功,他可以登录。这不是期望的行为(我认为)。

但是,如果 LDAP 服务器因任何原因不可用,这可能会派上用场,但前提是 Django 密码已更新为成功登录的 LDAP 密码。

我的问题是双重的:

来自the docs

If a backend raises a PermissionDenied exception, authentication will immediately fail. Django won't check the backends that follow.

因此,如果 LDAP 后端 returns None,则 Django 将尝试使用模型后端进行身份验证。但是,如果它引发 PermissionDenied,则登录将失败。