问题描述
我不确定这是否可能,但是我试图发现可使我的代码更具可维护性/可扩展性的模式。现在,我不喜欢在每个请求方法视图函数中都必须调用令牌解码函数,我发现@before_request装饰器附加到一个超级方便的蓝图上,但是我还没有弄清楚如何更改请求主体,因此函数可以“神奇地”期望请求主体中的解密有效负载。如果不允许这样做,那么我也可以从软件角度完全理解这一点。
我正在寻找这样的东西:-
Edit incoming request body payloads in flask api
当前我的设置是:
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
我想我的好奇心围绕着是否有更好的方法来完成,而不是向每个函数添加auth检查逻辑,从我的角度来看,我可以构建一些公共端点以在本地进行测试,然后继续一些代码,而无需修改这些功能以添加身份验证。
解决方法
您可以将已解码的令牌存储在flask.g
中的before_action
对象中,以使其在该请求的生存期内可用。 https://flask.palletsprojects.com/en/1.1.x/appcontext/