python-3.x - 有没有一种安全的方法来拦截 Flask 中的请求,解密身份验证令牌,然后改变请求正文或存储在任何有用的上下文中
问题描述
我不确定这是否可能,但我正在尝试发现使我的代码更易于维护/可扩展的模式。现在我不喜欢我必须在每个请求方法视图函数中调用一个令牌解码函数,我发现 @before_request 装饰器被附加到一个非常方便的蓝图但我还没有弄清楚如何改变请求体所以该函数可以“神奇地”期望请求正文中的解密有效负载。如果这不是被允许的,我也可以从软件的角度完全理解......
我正在寻找这样的东西:-
目前我的设置是:
class MyMethodView(MethodView):
def post(self):
token = request.headers.get('token')
identifier, is_valid = decrypt_token(token)
# Use identifier for endpoint
我想做的是
class MyMethodView(MethodView):
def post(self):
identifier= request.get_json().get('identifier')
# Use identifier for endpoint
使用以下
blueprint.@before_request():
def authenticate():
token = request.headers.get('token')
identifier, is_valid = decrypt(token)
# Some how modify the request body with the identifier
if is_valid:
return None
else:
#Unauthorized
我想我的一些好奇心围绕着是否有更好的方法来做到这一点,而不是向每个函数添加身份验证检查逻辑,从我的角度来看,我可以构建一些公共端点来在本地进行测试,然后只需在没有的情况下添加一些代码修改这些功能以添加身份验证。
解决方案
您可以将解码的令牌存储flask.g
在您的对象中,before_action
以使其在该请求的生命周期内可用。https://flask.palletsprojects.com/en/1.1.x/appcontext/
推荐阅读
- javascript - 如何访问对象数组的对象数组下的键值对 - java script
- android - Android Studio 4.1 与 Kotlin 不兼容
- sql-server - Google Apps Script JDBC connection to Azure SQL db - 类型映射问题
- reactjs - 在浮动标签上的 chrome 覆盖中记住密码自动填充
- sql - SQL:IF oder CASE 与 GROUP BY
- angular - matInput 错误设计上的脏插入或触摸
- docker - Docker 容器不会自动启动,除非有 --restart=always 标志
- magento2 - Magento 2 CE 共享服务器上商店的多个域?
- python - python isnull() 或 isna() 都不起作用
- arrays - Base.repeat 用于数值数组与 Base.kron