Django:通过自定义RemoteUserBackend路由用户创建

时间:2013-05-20 14:05:27

标签: django django-authentication

我正在创建一个需要通过SSL进行HTTP基本身份验证的Django项目。用户通过我公司的LDAP服务器进行身份验证。这是使用https://docs.djangoproject.com/en/1.3/howto/auth-remote-user/中描述的方法。

我创建了一个django.contrib.auth.backends.RemoteUserBackend的子类,它定义了一个configure_user()方法,该方法根据从LDAP中提取的信息填充各种用户字段。当用户使用HTTP basic auth登录时,这很好用。

我的项目还要求应用的用户能够在表单中输入用户名。提交表单后,我希望执行相当于User.objects.get_or_create(username=username)的操作并让我的自定义RemoteUserBackend.configure_user()填充LDAP中所有缺少的字段。这不能按预期工作,而是获取现有用户(好)或创建只设置了用户名字段(坏)的用户。

我如何获得所需的行为?我宁愿不必撕掉并用自定义模型替换Django的身份验证模型,但必要时可以完成。目标Django版本是1.3,但可以更改。

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案,但它需要放宽使用会话身份验证而不是HTTP基本身份验证的要求。

通过使用django-auth-ldap,我可以通过Django的常规会话身份验证以及create a user populated from LDAP对我公司的LDAP服务器进行身份验证。

django.contrib.auth.backends.RemoteUserBackend似乎与django-auth-ldap冲突,使用基本身份验证登录的用户不会从django-auth-ldap填充其字段。我们或许可以更改原始要求以使其发挥作用。