我正在开发一个项目,将LDAP身份验证集成到现有的Django应用程序中。使用此站点和其他人我终于能够使用django_auth_ldap后端正确配置所有内容。包括:
AUTH_LDAP_REQUIRE_GROUP = "CN=myGroup,CN=groups [...] "
因此,只有“myGroup”组中的用户才能登录。
现在在settings.py中正确配置了所有内容,在user_login视图中只有:
...
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return redirect('index')
else:
message = "Your account is disabled."
else:
message = "Invalid username or password supplied."
...
现在最后一步必须是通知用户他的登录失败的原因。现在,失败消息将始终是:“提供的用户名或密码无效。”
这应该是:
- 用户名/密码错误
- 不在正确的群体中
类似的东西:
if user:
...
else:
if (LDAP auth failed reason == user does not satisfy AUTH_LDAP_REQUIRE_GROUP):
message = "You are not in the right user group."
else:
message = "Invalid username or password supplied."
...
我怎么知道,在我的user_login视图中,LDAP身份验证失败的原因是什么?
P.S。:在django_auth_ldap日志中我看到“用户名的DEBUG身份验证失败:用户不满足AUTH_LDAP_REQUIRE_GROUP”
但是如何在user_login视图中知道这个?
答案 0 :(得分:0)
好的,回答我自己的问题。现在我刚从配置中删除AUTH_LDAP_REQUIRE_GROUP = "CN=myGroup,CN=groups [...] "
,并将以下内容添加到views.py:
from django_auth_ldap.backend import populate_user
def populate_user_callback(sender, **kwargs):
global isLdapUser;
global isInRightGroup;
isLdapUser = True;
if "myGroup" in kwargs["ldap_user"].group_names:
isInRightGroup = True;
populate_user.connect(populate_user_callback)
在user_login中:
isLdapUser = False;
isInRightGroup = False;
user = authenticate(username=username, password=password)
if (isLdapUser and not isInRightGroup):
user = None
message = "User is not in the right AD group."
...
return ...
如果使用ldap后端,authenticate()将调用populate_user_callback()函数。所以我自己检查一下这个组。
可能有一个更清洁/更好的答案,但现在这是有效的。