有没有一种安全的方法可以在Flask中拦截请求,解密身份验证令牌,然后更改请求正文或将其存储在任何有用的上下文中

问题描述

我不确定这是否可能,但是我试图发现可使我的代码更具可维护性/可扩展性的模式。现在,我不喜欢在每个请求方法视图函数中都必须调用令牌解码函数,我发现@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/

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...