在Flask-Login request_loader调用

时间:2018-05-05 17:06:53

标签: python python-3.x flask-login flask-principal

有一段时间我使用Flask-Login处理传统的用户名/密码身份验证请求,而Flask-Principal则使用Flask-Principal来处理后续请求中的路由授权检查。一切都很好。

我现在正试图利用Flask-Login的“request_loader”装饰器来处理遇到受保护端点的同一请求中的基于头的身份验证。

我遇到的问题是Flask-Principal的“require”装饰器似乎在Flask-Login的“request_loader”之前执行。在下面的示例中,在代码甚至尝试对用户进行身份验证之前,我遇到了403 Unauthorized HTTP Exception fire。

我必须遗漏一些愚蠢的东西,因为基于标头的身份验证 - 我相信 - 是在任何端点授权检查之前执行...

Flask-Login使用:

login_manager = LoginManager(app)
login_manager.anonymous_user = User
login_manager.session_protection = 'strong'
@login_manager.request_loader
def load_user_from_request(request):
    # do stuff, return User if found

Flask-Principal Use:

@blueprint.route('/some/endpoint', methods=['GET'])   
@read_permission.require(http_exception=403)
def some_function():
    # Do stuff

编辑:

作为旁注,Flask的“before_request”函数似乎在任何其他函数之前被调用,因此,理论上,我可能能够从那里处理基于头的身份验证,但似乎很难不使用Flask - 为此目的设计的登录功能......

1 个答案:

答案 0 :(得分:0)

我终于将身份验证逻辑移到@ app.before_request函数中,这确实有效,所以我会将此标记为答案,直到有更好的方法出现。