Django 1.11 身份验证 set_unusable_password 与将密码设置为 None

Ian*_*ick 2 python django ldap django-authentication

我的团队多年前覆盖了用户的身份验证方法,以针对 LDAP 而不是 djangos 模型后端进行身份验证。

此方法查看用户的 LDAP。如果用户存在正确的用户名和密码,它会获取或创建用户(这意味着用户不必作为模型对象存在于 Django 数据库中供某人登录)。

该方法将新创建的密码保留为无。然后设置所有其他信息。

我注意到,在验证用户后,如果它们有效,则调用用户的 set_unusable_password。在评论中,他们写道它覆盖了 Django 的内置密码处理......这显然是有道理的。但是我不知道为什么他们需要这样做,因为我们已经覆盖了身份验证方法。

我通过删除 set_unusable_password 来测试这一点,以便密码保留为 None 并且验证有效。他们仍然能够使用存储在 LDAP 上的密码登录。您仍然无法将模型中的密码覆盖为与 LDAP 不同的密码并使用该密码登录。

所以基本上 set_unusable_password 调用除了创建一个密码之外没有任何影响......无论如何都没有使用。

我唯一能想到的是,它可能是旧版本 Django 中问题的解决方案(我们现在是 1.11)。

在源代码和文档中花了很多时间之后,我不明白我们为什么需要它。

为什么会在那里?写它的人现在已经离开了,所以我无法解释他们为什么这样做。如果我删除它,会不会有任何不需要的副作用?

Ala*_*air 5

如果您将密码设置为 ,您的代码可能会起作用,None但使用set_unusable_password.

密码不可用的用户不得请求重置密码。如果您ModelBackend启用了和 LDAP 后端,则用户password=None可以重置其密码,然后使用模型后端登录。