一段时间以来,我使用 Flask-Login 来处理传统的用户名/密码身份验证请求,并使用 Flask-Principal 来处理针对后续请求的路由的授权检查。一切都很好。
我现在正在尝试利用 Flask-Login 的“request_loader”装饰器在命中受保护端点的同一请求中处理基于标头的身份验证。
我遇到的问题是 Flask-Principal 的“require”装饰器似乎在 Flask-Login 的“request_loader”之前执行。在下面的示例中,我什至在代码尝试验证用户身份之前就触发了 403 Unauthorized HTTP Exception。
考虑到基于标头的身份验证,我一定错过了一些愚蠢的东西——我相信——因为它在任何端点授权检查之前执行......
烧瓶登录使用:
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 主要用途:
@blueprint.route('/some/endpoint', methods=['GET'])
@read_permission.require(http_exception=403)
def some_function():
# Do stuff
编辑:
附带说明一下,Flask 的“before_request”函数似乎在任何其他函数之前被调用,所以理论上,我可能能够从那里处理基于标头的身份验证,但不使用 Flask-Login 函数似乎很脏为此目的而设计...