Flask_restful 中 如何使用 jwt_required装饰器保护api?

呵呵
  • 12

flask_restful默认使用类视图,而jwt里要用@jwt_required装饰器检验token。
我试过在method_decoratorsdecorators里添加装饰器,都报错了,我看了下源码,好像@jwt_required的结构和普通的装饰器结构不一样?

class AddUser(Resource):
    method_decorators = [jwt_required] # 这样没用

    def post(self):

求大佬指点。

报错信息:

TypeError: wrapper() missing 1 required positional argument: 'fn'

一般装饰器应该是这样的:

def auth(func):
    def wrapper(*args, **kwargs):
        ...
        res = func(*args, **kwargs)
        return res
    return wrapper

jwt_required的源码:

def jwt_required(
    optional: bool = False,
    fresh: bool = False,
    refresh: bool = False,
    locations: LocationType = None,
    verify_type: bool = True,
) -> Any:

    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            verify_jwt_in_request(optional, fresh, refresh, locations, verify_type)
            return current_app.ensure_sync(fn)(*args, **kwargs)

        return decorator

    return wrapper
回复
阅读 346
1 个回答
lpe234
  • 1.7k
✓ 已被采纳

直接这样使用

class AddUser(Resource):
    method_decorators = [jwt_required()]

    def post(self):
        pass

flask_jwt的装饰器其实只需要一层即可。而jwt_required封装了两层。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏