我有两个问题...第一个是我可以使用下面的电子邮件地址进行身份验证,但我不能使用我的广告用户名。我已经更改了“用户名”:“邮件”--〉“用户名”:“sAMAccountName”不起作用...还尝试了“uid”,但没有任何效果...那么,这是怎么回事?
LDAP_AUTH_URL = "ldap://some_address"
LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory"
LDAP_AUTH_SEARCH_BASE = "dc=various_dc_values,dc=com"
LDAP_AUTH_OBJECT_CLASS = 'Person'
LDAP_AUTH_USER_FIELDS = {
"username": "mail",
"first_name": "givenName",
"last_name": "sn",
"email": "mail",
}
第二个问题是,我想在多个域上进行身份验证,因为我无法解决如何将其他域添加到设置文件中,我添加了自己的功能。
#Authenticate User using backend
#User object is returned with forename and surname. Referenced in Templates.
user = auth.authenticate(username=email, password=password)
#did it work or is this a user that belongs to a different domain?
if user is None:
#Create new User object. This line doesn't work as expected, I want a blank authenticated User object not whatever this creates
user = django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
#Authenticate User with different domain
#Request comes back with forename and surname set
TryOtherAuthentication( email, password, request)
#Code breaks here - 'AnonymousUser' object has no attribute 'first_name'
user.first_name = request.user.first_name
user.last_name = request.user.last_name
user.is_staff = request.user.is_staff
user.save()
因此,我猜问题是如何创建一个用户对象,就像使用后端身份验证返回的对象一样?
如果用户对象是使用后端身份验证进行身份验证的,则此代码有效。
user.first_name = 'Bugsy'
user.last_name = 'Malone'
user.save()
我知道向其他服务器进行身份验证的函数可以正常工作,并且在请求中返回值。
我只是不能解决如何创建一个用户对象,以便用户被定向到索引页面。
if user is not None:
auth.login(request, user)
return redirect('index')
1条答案
按热度按时间qxgroojn1#
LDAP3目前似乎不支持多后端认证。
所以我基本上只需要忽略整个“用户”,只需要会话变量来保存值。幸运的是,应用程序不是很大,所以不需要太多的修改。