2017-10-17 1 views
0

기존 Django 앱에서 LDAP 인증을 통합하는 프로젝트를 진행 중입니다. 이 사이트와 다른 사람들을 사용하여 마침내 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에 대한 이유를보기 인증 실패?
을하지만 어떻게 USER_LOGIN보기에이 알고 다음에


P.S는 : 나는 "사용자는 AUTH_LDAP_REQUIRE_GROUP을 만족하지 않는 DEBUG 인증 이름 실패"를 참조하십시오 마십시오 로그인 django_auth_ldap?

답변

0

좋아요, 제 질문에 대답 해주세요. populate_user_callback() 함수의 경우 호출)

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 ... 

인증합니다 (:

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에 : 지금은 그냥하여 views.py에 다음 내 설정에서 AUTH_LDAP_REQUIRE_GROUP = "CN=myGroup,CN=groups [...] "를 제거하고 추가 LDAP 백엔드가 사용됩니다. 그래서 나는 올바른 그룹을 직접 확인한다.


아마도 이것에 대한 클리너/더 나은 대답이있을 수 있지만 지금은 효과가 있습니다.