профиль пользователя django-ldap-auth в django > 1.7

#python #django #django-auth-ldap

#python #django #django-auth-ldap

Вопрос:

Я пытаюсь внедрить django-ldap-auth в свой проект, и, кажется, все работает просто отлично. Проблема в том, что этот пакет не поддерживает user profile заполнение полей для версий Django новее 1.7.

Из документов:

Обратите внимание, что Django 1.7 и более поздние версии напрямую не поддерживают профили пользователей. В этих версиях LDAPBackend будет игнорировать настройки, связанные с профилем.

Я добавил это в свой settings.py , но ничего не происходит (как и ожидалось):
AUTH_LDAP_PROFILE_ATTR_MAP = {"description": "description"}

Мой вопрос: как я могу включить AUTH_LDAP_PROFILE_ATTR_MAP в более новых версиях django?

РЕДАКТИРОВАТЬ: я подумываю об использовании пользовательской модели пользователя, но я не уверен, что это лучший способ здесь..

Ответ №1:

Я решил это, используя one-to-one User profile model и populate_user сигнал, излучаемый django-ldap-auth .

Код

 from __future__ import unicode_literals
import django_auth_ldap.backend
from fences.models import Profile
from django.db import models

def populate_user_profile(sender, user=None, ldap_user=None, **kwargs):
  temp_profile = None
  bucket = {}

  try:
      temp_profile = user.profile
  except:
      temp_profile = Profile.objects.create(user=user)

  bucket['street_address'] = ldap_user.attrs.get('streetAddress')
  bucket['telephone_number'] = ldap_user.attrs.get('telephoneNumber')
  bucket['title'] = ldap_user.attrs.get('title')

  for key, value in bucket.items():
      if value:
          setattr(user.profile, key, value[0].encode('utf-8'))
  user.profile.save()

django_auth_ldap.backend.populate_user.connect(populate_user_profile)