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

时间:2015-09-24 14:11:06

标签: python django django-authentication

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

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

但是,如果LDAP服务器由于任何原因不可用,这可能会派上用场,但只有在成功登录时才能使用LDAP密码更新Django密码。

我的问题有两个:

  • 是否可以(使用我自己的后端或其他东西或使用django_ldap_auth本身)将正确的密码保存到Django数据库?
  • 如果没有,如果LDAP服务器可访问,用户存在于LDAP数据库中,但密码不匹配,即使该密码与Django数据库匹配,是否可能验证失败?

1 个答案:

答案 0 :(得分:2)

来自the docs

  

如果后端引发PermissionDenied异常,则身份验证将立即失败。 Django不会检查后面的后端。

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