Django身份验证LDAP完整示例

7
我部分理解了Django Ldap身份验证。有人能给出一个完整的例子来开发使用Django身份验证Ldap的非常基本的应用程序吗?
我查看了这个资源,尝试理解很多东西,但我仍然无法理解如何在实现中使用它。如何创建用户模型,该模型将与LdapBackend类一起使用,以及如何在authenticate()方法中编写许多内容等。
2个回答

7

这里提供了一个非常好的示例,指导您如何创建自定义LDAPBackend

您需要在settings.py中配置您的LDAP设置(如链接所示),并将您的LDAPBackend添加到AUTHENTICATION_BACKENDS。 您可以使用提供的默认LDAPBackend或创建自定义LDAPBackend并使用它。

使用django-auth-ldap提供的默认LDAPBackend

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

如果您需要添加额外逻辑来进行身份验证,可以使用自定义的LDAPBackend

AUTHENTICATION_BACKENDS = (
    'accounts.backends.MyLDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

然后在accounts/backends.py中:

from django_auth_ldap.backend import LDAPBackend

class MyLDAPBackend(LDAPBackend):
    """ A custom LDAP authentication backend """

    def authenticate(self, username, password):
        """ Overrides LDAPBackend.authenticate to add custom logic """

        user = LDAPBackend().authenticate(self, username, password)

        """ Add custom logic here """

        return user

查看上面链接的示例,以获得更多细节。

如果您是LDAP新手,我建议您查看此答案(以及另一个与此主题相关的问题)。


更新 django-auth-ldap 的新版本说明

感谢 @wolf2600 指出,现在你需要重写 authenticate_ldap_user 而不是 authenticate


4
值得注意的是:django_auth_ldap的语法已经改变。您需要覆盖authenticate_ldap_user而不是覆盖authenticate。请参考https://django-auth-ldap.readthedocs.io/en/latest/custombehavior.html
    def authenticate_ldap_user(self, username, password):
        """ Overrides LDAPBackend.authenticate to save user password in django """
        user = LDAPBackend.authenticate_ldap_user(self, username, password)

        # If user has successfully logged in, save password in django database
        if user:
            user.set_password(password)
            user.save()

        return user

我为自己的粗心感到后悔了好几个小时(咳嗽几天),一直想知道为什么我的自定义authenticate没有被调用,直到我发现了readthedocs.io页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接