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()

那么我的问题是,有没有更好的方法来实现这一点?我知道这是可行的,但这意味着每次我这样做时,我都必须运行两次搜索(或者我想我可以使用从这两种方式返回的数据......)无论如何,我觉得这很骇人听闻,在哪里为了查看连接是否无法正常工作,try如果它没有成功,我会修复它。有没有更好的办法?

4

0 回答 0