测试以查看Python LDAP连接是否有效

时间:2012-10-04 21:30:52

标签: python django python-ldap

在我们的应用程序中,我们有一个用于身份验证的CAS后端,然后我们存储有关我们想要从LDAP服务器检索的用户的数据。为方便起见,我们将自定义backends.py与我们自己的后端进行身份验证。这个后端扩展了Django-CAS backend。每次我们将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()

我的问题是,有没有更好的方法来实现这一目标?我知道这有效,但这意味着每次我这样做我必须运行两次搜索(或者我想我可以使用从这种方式返回的数据......)无论如何,我觉得这是hackish,在哪里为了查看连接是否无法正常工作,我try然后修复它,如果它没有去。还有更好的方法吗?

0 个答案:

没有答案