python - Flask-Principal 在调用 Flask-Login request_loader 之前需要触发异常
问题描述
一段时间以来,我使用 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 函数似乎很脏为此目的而设计...
解决方案
我终于将身份验证逻辑移到了 @app.before_request 函数中,并且确实有效,所以我会将其标记为答案,直到出现更好的结果。
推荐阅读
- r - 使用 R 中的循环函数计算错误
- node.js - Express.js POST 请求返回 404
- python - 在 TensorFlow 中并行化张量操作
- css - 如何在中心设置 Angular Kendo 网格按钮文本?
- java - 在 JAVA 中显示无效输入错误
- sql - 将分布重新采样为具有最大可能数据记录的新分布
- python-3.x - 当同时给出分区键和排序键时,如何使用 Python 中的 Boto3 库从 DynamoDB 表中删除所有项目?
- swift - 将两个类分配给同一个变量,这甚至可能吗?
- pandas - 如何在同一数据框中创建具有字典中键名的新列?
- java - java - 如何访问从java中的另一个类接收File作为参数的方法?