Skip to main content
 首页 » 编程设计

python之使用 Django 管理页面添加具有其他 AUTHENTICATION_BACKEND 的用户

2024年11月01日25开发

我正在使用 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 用户进行身份验证的唯一方式。