2017-10-17 28 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の理由を見ます認証に失敗しました?


P.S:私は「DEBUG認証ユーザ名に失敗しました:ユーザーがAUTH_LDAP_REQUIRE_GROUPを満たしていない」を参照くださいログインdjango_auth_ldapで
をしかし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バックエンドが使用されます。だから私は正しいグループを自分で確認するだけです。


おそらくクリーナー/これに対するより良い回答がありますが、これは現在作業中です。

関連する問題