Python类结构允许多种身份验证方法

时间:2014-01-14 11:05:42

标签: python class object inheritance

我正在构建一个应用程序,其中一个包管理多个auth方法。

现在它支持 LDAP PAM ,但我希望将来它还支持更多。

我有一个包 PAM.pyLDAP.py

例如PAM.py内容:

import pam

class pam_auth:

    def __init__(self, username=None, password=None):
        self.username=username
        self.password=password

    def login(self):        
        res_auth=pam.authenticate(username=self.username, password=password)
        return res_auth

在另一个包中我有下一个类登录:

class Login:

    def __init__(self,method=None):
        self.authmethod=method

    def login(self):        
        res_login=self.authmethod.login()

        return res_login

现在我正在构建我的身份验证码:

p=pam_auth()
p.username="pep"
p.password="just"

l=Login(method=p)
print l.login

而且我认为这不是最好的方法,并且可以用多种方法和不同的方法来认证。 例如,可能是?:

l=Login(method=PAM.pam_auth)
l.username="pep"
l.password="just"
print l.login()

¿我必须在Login Class或PAM类中更改以什么方式工作?

1 个答案:

答案 0 :(得分:0)

对于您提到的更改,您需要做的就是在Login的{​​{1}}内设置课程:

__init__

然而,正如Stefano Sanfilippo所提到的,这实际上可能会妨碍模块化,因为突然class Login: def __init__(self,method): self.authmethod=method() 必须知道身份验证方法的构造函数参数。


还有一些提示:

如果您正在编写python 2,则需要创建new-style classes

而不是

Login

使用

class Login:

此外,如果您正在编写一般身份验证层,您可能不希望明确处理用户名和密码:将来如果要使用第三因素,智能卡或生物识别身份验证会发生什么?您可能应该处理不透明的“数据”,即身份验证方法接收,不会改变。