我正在使用 django_auth_ldap针对大型公司 ActiveDirectory 系统对 Django 项目的用户进行身份验证,该系统没有以有用的方式组织(而且我没有能力更改它)。因此,我必须单独添加用户,这样我就不会以任何可以通过 LDAP 进行身份验证的用户登录系统而告终。可以使用
在命令行上添加 LDAP 用户from django_auth_ldap.backend import LDAPBackend
user = LDAPBackend().populate_user('alice')
但我不能使用管理页面做同样的事情(添加用户强制我输入密码,而不是让帐户继承已经存在的 LDAP 凭据。)
似乎没有一种简单/聪明的方法可以在不必编写 django 管理页面的情况下完成此操作(尽管如果我对此有误,请纠正我)。如何添加一个简单的管理页面,它只创建一个用户而不设置密码或其他任何东西?
我知道基 native 制基本上涉及做如下事情:
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
UserAdmin.add_form_template = ('addLDAPuser.html')
admin.site.unregister(User)
admin.site.register(User,UserAdmin)
但我仍然不清楚如何制作模板和处理逻辑,这样我才不会得到一堆可以成功通过 django.contrib.auth.backends.ModelBackend 身份验证的用户帐户。密码为空。 (显然,我可以从 settings.py 中的 django.contrib.auth.backends.ModelBackend 中删除 AUTHENTICATION_BACKENDS,但这也使我无法拥有与 LDAP 分开的本地管理员帐户。)
请您参考如下方法:
您可以尝试扩展标准用户模型并覆盖其 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 用户进行身份验证的唯一方式。
