2017-10-17 45 views
0

我一个项目,LDAP认证在现有的Django应用程序集成工作。使用这个网站和其他网站,我终于可以使用django_auth_ldap后端正确配置所有内容。包括:的Python,Django的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

好了,回答我的问题。现在我只是删除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 ... 

身份验证()将调用populate_user_callback()函数,如果使用ldap后端。所以我只是自己检查一下正确的组。


可能有一个更清洁/更好的答案,但这是现在工作。