有一段时间我使用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 - 为此目的设计的登录功能......
答案 0 :(得分:0)
我终于将身份验证逻辑移到@ app.before_request函数中,这确实有效,所以我会将此标记为答案,直到有更好的方法出现。