如何使用 Flask 和 flask_jwt_extended 进行自定义 JWT 验证?



我想在调用令牌时向令牌添加额外的验证@jwt_required。我想验证其中一个声明。我可以用JWTManager做到这一点吗?

目前我的代码只是调用:

jwt = JWTManager(app)

我用以下方式装饰功能:@jwt_required

在我的头顶上,我的倾向是创建一个包装jwt_required的自定义装饰器。

以下是通过functools.wraps文档大致了解它的外观:

from functools import wraps
from flask_jwt_extended import jwt_required
from flask_jwt_extended.view_decorators import _decode_jwt_from_request
from flask_jwt_extended.exceptions import NoAuthorizationError
def custom_validator(view_function):
@wraps(view_function)
def wrapper(*args, **kwargs):
jwt_data = _decode_jwt_from_request(request_type='access')
# Do your custom validation here.
if (...):
authorized = True
else:
authorized = False
if not authorized:
raise NoAuthorizationError("Explanation goes here")
return view_function(*args, **kwargs)
return jwt_required(wrapper)
@app.route('/')
@custom_validator
def index():
return render_template('index.html')

在这里,您可以找到jwt_required的源代码。

在您的另一个问题中发布了这个,但我也会在这里发布它,以防其他人偶然发现这一点。

作者在这里。就其价值而言,flask-jwt 也不支持要求声明(即使它说它确实如此)。https://github.com/mattupstate/flask-jwt/issues/98

编辑:这现在可以在烧瓶 - jwt-extended中使用。 https://github.com/vimalloc/flask-jwt-extended/issues/64#issuecomment-318800617

干杯

相关内容

  • 没有找到相关文章

最新更新