使用Django管理页面添加具有其他身份验证后端的用户

2024-09-27 21:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django_auth_ldap对Django项目的用户进行身份验证,该系统是针对一个大型的公司ActiveDirectory系统进行的,该系统没有有效的组织方式(而且我没有能力更改它)。因此,我必须单独添加用户,这样我就不会遇到任何能够验证LDAP是否能够登录系统的用户。可以使用在命令行上添加LDAP用户

from django_auth_ldap.backend import LDAPBackend

user = LDAPBackend().populate_user('alice')

但是我不能使用admin页面来做同样的事情(添加用户会迫使我输入密码,而不是让帐户继承已经存在的LDAP凭据)

似乎不需要编写一个django管理页面就可以实现这一点(尽管如果我错了,请纠正我)。如何添加一个简单的管理页面,只创建一个用户,而不设置密码或其他任何东西?在

我了解基本的机制基本上包括做以下事情:

^{pr2}$

但是我仍然不清楚如何创建模板和处理逻辑,这样我就不会只得到一堆用户帐户,这些帐户将使用空密码成功地针对django.contrib.auth.backends.ModelBackend进行身份验证。(显然,我可以将django.contrib.auth.backends.ModelBackendAUTHENTICATION_BACKENDS中删除设置.py,但这也使我无法将本地管理员帐户与LDAP分开。)


Tags: django用户auth身份验证密码系统帐户页面
2条回答

不幸的是,我不认为没有一个干净的方法可以不写你的自定义管理页面。在

不过,我不会那么害怕的。只需为授权用户使用不需要密码的自定义表单建模。在

您可以尝试扩展标准用户模型并重写其save()方法。Make sure you read up on the consequences of overriding the save method here。这样的模型可以是这样的:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class LDAPUser(models.Model):
        user = models.OneToOneField(User, editable=False)
        username = models.CharField(max_length=32, unique=True)

        def save(self, *args, **kwargs):
                self.user, _ = User.objects.get_or_create(username=self.username)
                self.user.save()
                '''
                Do custom saving here:
                from django_auth_ldap.backend import LDAPBackend

                user = LDAPBackend().populate_user('alice')
                '''
                super(LDAPUser, self).save(*args, **kwargs)

        def __unicode__(self):
                return self.username

如果不向用户提供密码,则用户无法使用密码字段登录。希望这意味着您的LDAP后端将是LDAP用户进行身份验证的唯一方法。。在

相关问题 更多 >

    热门问题