2

作業中のアプリケーションでは、認証用の CAS バックエンドがあり、LDAP サーバーから取得するユーザーに関するデータを保存します。backends.py認証のための独自のバックエンドを持つカスタムがあることを容易にするため。このバックエンドはDjango-CAS バックエンドを拡張します。LDAP 接続をクラス変数に保存し、それが存在するかどうかを確認するたびに、LDAP サーバーに再接続する必要がないようにします。もしそうなら、それを再利用します。

if not hasattr(PopulatedCASBackend, 'ldap_server'):
    PopulatedCASBackend.ldap_server = ldap.initialize(settings.LDAP_SERVER_URL)
    PopulatedCASBackend.ldap_server.simple_bind_s()

ただし、しばらくすると、LDAP はこの接続が無効であると見なし、この接続の使用を拒否することがわかりました。そこで、else ステートメントをコードに追加することにしました。

else :
# we are trying to see if our current connection isn't stale. If it is, close it and remake
    try :
        user_data = ldap_server.search_s(
                        # all the correct params to search
                    )
    except:
        #connection is stale, so remake a new connection
        PopulatedCASBackend.ldap_server.unbind_s()
        PopulatedCASBackend.ldap_server = ldap.initialize(settings.LDAP_SERVER_URL)
        PopulatedCASBackend.ldap_server.simple_bind_s()

私の質問は、これを達成するためのより良い方法はありますか? これが機能することは理解していますが、これは、これを行うたびに検索を 2 回実行する必要があることを意味します (または、これから返されたデータをどちらの方法でも使用できると思います...) とにかく、これはハックだと思います。接続が機能しないかどうかを確認するために、接続されtryていない場合は修正します。より良い方法はありますか?

4

0 に答える 0