django中的django-ldap-auth用户配置文件> 1.7

时间:2016-10-23 23:31:45

标签: python django django-auth-ldap

我试图在我的项目中实现django-ldap-auth,一切似乎都运行得很好。问题是,对于版本低于1.7的Django版本,该软件包不支持user profile字段填充。

来自docs:

  

注意Django 1.7及更高版本不直接支持用户配置文件。在这些版本中,LDAPBackend将忽略与配置文件相关的设置。

我已将此添加到我的settings.py但未发生任何事情(如预期的那样):
AUTH_LDAP_PROFILE_ATTR_MAP = {"description": "description"}

我的问题是:如何在较新的django版本中启用AUTH_LDAP_PROFILE_ATTR_MAP

编辑:我正在考虑使用自定义用户模型,但我不确定这是否是最佳方式..

1 个答案:

答案 0 :(得分:3)

I solved this using one-to-one User profile model and populate_user signal emitted by django-ldap-auth.

Code

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)