4

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

目前我的代码只是调用:

jwt = JWTManager(app)

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

4

2 回答 2

6

在我的脑海中,我倾向于创建一个自定义装饰器来包装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 的源代码。

于 2017-07-06T18:24:36.873 回答
1

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

作者在这里。对于它的价值,flask-jwt 也不支持要求声明(即使它说支持)。https://github.com/mattupstate/flask-jwt/issues/98

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

干杯

于 2017-07-06T18:28:50.580 回答