2

私はdjango_auth_ldapを使用して、有用な方法で編成されていない大企業の ActiveDirectory システムに対して Django プロジェクトのユーザーを認証しています (そして、それを変更する能力がありません)。そのため、LDAP に対して認証できるユーザーがシステムにサインインできるようにならないように、ユーザーを個別に追加する必要があります。コマンドラインで LDAP ユーザーを追加することができます。

from django_auth_ldap.backend import LDAPBackend

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

しかし、管理ページを使用して同じことを行うことはできません (ユーザーを追加すると、アカウントが既存の LDAP 資格情報を継承するだけでなく、パスワードの入力が強制されます)。

django 管理ページを作成せずにこれを達成するための簡単で賢い方法はないようです (ただし、これについて間違っている場合は修正してください)。パスワードなどを設定せずにユーザーを作成するだけの簡単な管理ページを追加するにはどうすればよいですか?

基本的な仕組みには、基本的に次のようなことが含まれることを理解しています。

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.pydjango.contrib.auth.backends.ModelBackendから削除することもできAUTHENTICATION_BACKENDSますが、それによって LDAP とは別のローカル管理者アカウントを持つことができなくなります。)

4

2 に答える 2

2

試してみることができるのは、標準のユーザー モデルを拡張し、その save() メソッドをオーバーライドすることです。ここで save メソッドをオーバーライドした場合の結果についてよく読んでください。このようなモデルは次のようになります。

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 ユーザーを認証する唯一の方法であることを意味します。

于 2013-10-15T14:46:07.467 に答える
0

残念ながら、カスタム管理ページを作成せずにそれを行うためのクリーンな方法はないと思います。

しかし、私はそれをそれほど怖がることはありません。パスワードを必要としないカスタムフォームを使用して、auth.User モデルの新しい ModelAdmin を作成するだけです。

于 2013-10-02T19:33:19.183 に答える