如何使用 Flask 和 flask_jwt_extended 进行自定义 JWT 验证?
How can I do custom JWT validation with Flask and flask_jwt_extended?
我想在调用@jwt_required 时向令牌添加额外的验证。我想验证其中一项声明。我可以用 JWTManager 做到这一点吗?
目前我的代码只调用:
jwt = JWTManager(app)
我用以下方法装饰函数:@jwt_required
在我的脑海中,我倾向于创建一个自定义装饰器来包装 jwt_required
。
这里有一个大概的样子,来自 the functools.wraps documentation:
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')
Here 是您可以找到 jwt_required.
的源代码的地方
在你的其他问题中发布了这个,但我也会 post 在这里,以防其他人偶然发现这个。
作者在这里。对于它的价值,flask-jwt 也不支持要求声明(即使它说支持)。 https://github.com/mattupstate/flask-jwt/issues/98
编辑:现在可以在 flask-jwt-extended 中使用。 https://github.com/vimalloc/flask-jwt-extended/issues/64#issuecomment-318800617
干杯
我想在调用@jwt_required 时向令牌添加额外的验证。我想验证其中一项声明。我可以用 JWTManager 做到这一点吗?
目前我的代码只调用:
jwt = JWTManager(app)
我用以下方法装饰函数:@jwt_required
在我的脑海中,我倾向于创建一个自定义装饰器来包装 jwt_required
。
这里有一个大概的样子,来自 the functools.wraps documentation:
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')
Here 是您可以找到 jwt_required.
的源代码的地方在你的其他问题中发布了这个,但我也会 post 在这里,以防其他人偶然发现这个。
作者在这里。对于它的价值,flask-jwt 也不支持要求声明(即使它说支持)。 https://github.com/mattupstate/flask-jwt/issues/98
编辑:现在可以在 flask-jwt-extended 中使用。 https://github.com/vimalloc/flask-jwt-extended/issues/64#issuecomment-318800617
干杯