我正在构建一个应用程序,其中一个包管理多个auth方法。
现在它支持 LDAP 和 PAM ,但我希望将来它还支持更多。
我有一个包
PAM.py
和
LDAP.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类中更改以什么方式工作?
答案 0 :(得分:0)
对于您提到的更改,您需要做的就是在Login
的{{1}}内设置课程:
__init__
然而,正如Stefano Sanfilippo所提到的,这实际上可能会妨碍模块化,因为突然class Login:
def __init__(self,method):
self.authmethod=method()
必须知道身份验证方法的构造函数参数。
还有一些提示:
如果您正在编写python 2,则需要创建new-style classes:
而不是
Login
使用
class Login:
此外,如果您正在编写一般身份验证层,您可能不希望明确处理用户名和密码:将来如果要使用第三因素,智能卡或生物识别身份验证会发生什么?您可能应该处理不透明的“数据”,即身份验证方法接收,不会改变。