用于Flask安全的自定义身份验证方法

2024-04-25 07:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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的私有函数,该函数在不访问私有成员的情况下自己做不到,比如将用户设置到请求上下文堆栈的顶部并发送信号。代码如下:

^{pr2}$

所以我的问题是:在充分利用Flask安全性的同时,使用自定义身份验证方法的正确方法是什么?在


Tags: 方法用户auth身份验证httpflaskreturndef
1条回答
网友
1楼 · 发布于 2024-04-25 07:15:04

你可以用一个快速的猴子补丁来完成。不太理想,但我不确定你还能做些什么,直到Flask安全团队以一种更优雅的方式来处理这个问题。在

import flask_security

def verify_and_update_password_custom(password, user):
    return user.verify_password(password)    

flask_security.forms.verify_and_update_password = verify_and_update_password_custom

我不确定它是否在其他地方使用。以上是我自己的目的。如果它真的在其他地方被调用,你只需要在它所在的地方进行monkeypatch。在

相关问题 更多 >