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



我甚至不确定这是否可能,但我正在努力发现能够使我的代码更易于维护/扩展的模式。现在我不喜欢我必须在每个请求方法视图函数中调用令牌解码函数,我发现@before_request装饰器附在蓝图上非常方便,但我还没有弄清楚如何更改请求主体,以便函数可以";神奇地";在请求主体中期望解密的有效载荷。如果这不是允许的,我完全可以从软件的角度理解。。。

我在找这样的东西:-

编辑烧瓶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

我想我的一些好奇是围绕着是否有更好的方法来实现这一点,而不是向每个函数添加身份验证逻辑。从我的角度来看,我可以构建一些公共端点来进行本地测试,然后只需编写一些代码,而无需修改这些函数来添加身份验证。

您可以将解码的令牌存储在before_actionflask.g对象中,以使其在该请求的生存期内可用。https://flask.palletsprojects.com/en/1.1.x/appcontext/

最新更新