【问题标题】:Django user julienb does not have a profile to populateDjango 用户 julienb 没有要填充的配置文件
【发布时间】:2013-03-31 14:59:28
【问题描述】:

我正在尝试通过 ldap 登录管理站点。 用户在 ldap 中找到。我的问题是每次我尝试登录时都会出现这个错误。

search_s('ou=utilisateurs,ou=employee,dc=bi,dc=invik,dc=lu', 2, '(SAMAccountName=%(user)s)')returned 1 objects: cn=julien boelen,ou=utilisateurs,ou=employee,dc=bi,dc=invik,dc=lu

search_s('ou=utilisateurs,ou=employee,dc=bi,dc=invik,dc=lu', 2, '(SAMAccountName=%(user)s)')returned 1 objects: cn=julien boelen,ou=utilisateurs,ou=employee,dc=bi,dc=invik,dc=lu

Populating Django user julienb

Populating Django user julienb

Django user julienb does not have a profile to populate

Django user julienb does not have a profile to populate

显然我无法登录管理站点。 我不知道如何告诉 django“不要使用配置文件!!让我登录”

这是我的 settings.py

AUTHENTICATION_BACKENDS = (

     'django_auth_ldap.backend.LDAPBackend',
     'django.contrib.auth.backends.ModelBackend',                    

)

AUTH_LDAP_SERVER_URI = "ldap://192.168.1.5/"
AUTH_LDAP_CONNECTION_OPTIONS = {
        ldap.OPT_DEBUG_LEVEL: 0,
        ldap.OPT_REFERRALS: 0,
}


AUTH_LDAP_BIND_DN = "browser"
AUTH_LDAP_BIND_PASSWORD = "Django15iscool"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=utilisateurs,ou=employee,dc=bi,dc=invik,dc=lu",
                        ldap.SCOPE_SUBTREE, '(SAMAccountName=%(user)s)')


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

我不知道为什么我无法登录,为什么他要求提供个人资料,我不使用个人资料,是否有什么要指定来告知 django 不关心个人资料,让我登录 :)

【问题讨论】:

标签: python django django-authentication django-auth-ldap


【解决方案1】:

我知道个人资料日志看起来很吓人,但它实际上是一个红鲱鱼*。您真正的问题是您尝试使用没有员工或超级用户权限的帐户登录管理页面。鉴于您当前的设置,有两种方法可以处理:

1) 如果您希望您的帐户的超级用户权限从您的 LDAP 模型继承,您将需要为 is_superuser 属性设置用户标志映射,效果如下:

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_superuser": "cn=superuser,ou=groups,dc=example,dc=com"
}

2) 如果这不起作用,您将需要使用已经拥有超级用户权限的现有帐户登录。当您创建第一个python manage.py syncdb 时,系统应该会提示您创建一个超级用户帐户。只要您仍在使用django.contrib.auth.backends.ModelBackend 进行身份验证,您就应该能够继续使用该超级用户帐户访问您的管理页面。否则,您可以随时进入 shell 并将您的帐户提升为超级用户或创建一个新的超级用户帐户。

*澄清一下,正在发生的事情是身份验证后端正在尝试填充您的 User 对象和关联的 UserProfile 对象(如果存在)。这是错误日志不够具体的情况......该错误消息并不表示存在问题,而是表示您尚未实现的功能。 (如果您想了解有关 1.4 中此功能的更多信息,请访问 https://docs.djangoproject.com/en/1.4/topics/auth/#storing-additional-information-about-users...在 1.5 中为 deprecated

【讨论】:

    【解决方案2】:

    LDAPBackend 不创建配置文件。首先尝试使用 User 模型类创建用户。你需要 Django 项目目录下的 shell:

    python manage.py shell
    

    然后在 Python shell 中尝试:

    >>> from django.contrib.auth.models import User
    >>> user = User.objects.create_user('username', None, None)
    >>> user.save()
    

    以这种方式正确地创建了用户,密码也为空。 配置文件可以包含其他字段,您可以使用设置中的 AUTH_LDAP_PROFILE_ATTR_MAP 参数使用 LDAP 属性填充这些字段。如果您对自定义感兴趣,请注意,因为在 Django 1.5 中,用户配置文件已被弃用并被自定义用户模型取代,这应该更灵活。

    https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#extending-the-existing-user-model https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#substituting-a-custom-user-model

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多