我正在使用flask security对用户进行身份验证。我已经确保身份验证与http_auth_required
修饰符一起正常工作-用户正在根据userstore进行验证(在我的例子中是SQLAlchemyUserDatastore
),一切正常。在
我现在想使用我自己的身份验证方法(我将使用一个定制的LDAP验证系统),同时仍然利用Flask安全性为我提供的功能(比如current_user
)。我写了一个定制的装饰器,看起来像这样:
def authenticate_with_ldap(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not request.authorization:
return unauthorized_user_handler()
user = user_datastore.get_user(request.authorization.username)
if not user or not authenticate_with_ldap(user.email, user.password):
return unauthorized_user_handler()
return func(*args, **kwargs)
return wrapper
但是,当我看一下http_auth_required
修饰符时,我发现它使用了一个名为_check_http_auth
的私有函数,该函数在不访问私有成员的情况下自己做不到,比如将用户设置到请求上下文堆栈的顶部并发送信号。代码如下:
所以我的问题是:在充分利用Flask安全性的同时,使用自定义身份验证方法的正确方法是什么?在
你可以用一个快速的猴子补丁来完成。不太理想,但我不确定你还能做些什么,直到Flask安全团队以一种更优雅的方式来处理这个问题。在
我不确定它是否在其他地方使用。以上是我自己的目的。如果它真的在其他地方被调用,你只需要在它所在的地方进行monkeypatch。在
相关问题 更多 >
编程相关推荐