Показать или узнать атрибуты LDAP в django

У меня есть проект на django, где я пытаюсь подключиться к серверу ldap. Все вроде бы работает хорошо, потому что когда я вхожу в django, пользователь добавляется в базу данных django.

Проблема в том, что я сделал пользовательского пользователя с полем department в django и я хочу получить конкретный атрибут из ldap и присвоить его полю department, но когда я вхожу в систему, я вижу в логах django эту строку:

 search_s ('ou=xxx,o=xxx, 2 '(uid=%user)s)') returned 1 objects cn=usern_name,ou=xxx,o=xxx
Creating Django user user_name
Populating Django user user_name
cn=user_name,ou=xxx,o=xxx does not have a value for the attribute aaeAppAdd

Затем я вижу в поле department в базе данных пользователей Django, что оно пустое.

Как я могу увидеть или получить атрибуты user_object (печать и т.д.), которые предлагает LDAP, когда я вхожу в систему?

Вот мои файлы конфигурации.

settings.py

# Config to authenticate with LDAP
import ldap
from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType

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

basedn = "ou=xxx,o=xxx"
AUTH_LDAP_SERVER_URI = 'ldap://ldapserver:389'


AUTH_LDAP_BIND_DN = ""

AUTH_LDAP_BIND_PASSWORD = ""

AUTH_LDAP_USER_SEARCH = LDAPSearch(basedn, ldap.SCOPE_SUBTREE, "(uid=%(user)s)")


AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail",
    "department": "aaeAppAdd"
}

AUTH_LDAP_ALWAYS_UPDATE_USER = True


LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {"console": {"class": "logging.StreamHandler"}},
    "loggers": {"django_auth_ldap": {"level": "DEBUG", "handlers": ["console"]}},
}

############################## django-auth-ldap debug ##############################
if DEBUG:
    import logging, logging.handlers
    logfile = BASE_DIR / 'django-ldap-debug.log'
    my_logger = logging.getLogger('django_auth_ldap')
    my_logger.setLevel(logging.DEBUG)

    handler = logging.handlers.RotatingFileHandler(
       logfile, maxBytes=1024 * 500, backupCount=5)

    my_logger.addHandler(handler)

model.py приложения учетной записи

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

# Create your models here.
class CustomUser(AbstractUser):
    department = models.CharField(blank=True, max_length=15)

views.py учетной записи app

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
from accounts.models import CustomUser

# Create your views here.
@login_required
def userinfo(request):
    try:
        # ldapuserprofile = CustomUser.objects.get(uid=request.user.username)
        ldapuserprofile = CustomUser.objects.get(request.user.username)

    except CustomUser.DoesNotExist:

        return HttpResponseRedirect('/login/')

    for attr in ldapuserprofile:
        print(attr)    

    context = {'request': request, 'ldapuser': ldapuserprofile,}
    
    return render(request, 'userinfo.html', context)

urls.py

from django.urls import path
from accounts import views

urlpatterns = [

    path('userinfo/', views.userinfo),
]

Когда я пытаюсь вызвать url появляется en arror с

"слишком много значений для распаковки (ожидается2)"

Используя скрипт python ldap, я могу получить этот атрибут aaeAppAdd с другими атрибутами информации о пользователе.

Спасибо

Вернуться на верх