如何用自定义JWT装饰器@tokenreq保护Flasgger的/apidocs路由?
可以用@tokenreq装饰器保护/apidocs路由,以下是两种可行实现方式:
方法一:精准保护/apidocs单一路由
这种方式仅给/apidocs页面添加权限验证,不影响Swagger的其他接口(比如/swagger.json):
from flask import Flask, jsonify from flasgger import Swagger # 导入你自定义的tokenreq装饰器 from your_decorator_module import tokenreq app = Flask(__name__) # 初始化Flasgger swagger = Swagger(app) # 获取Flasgger默认注册的/apidocs视图函数 apidocs_view = app.view_functions.get('flasgger.apidocs') if apidocs_view: # 移除原有路由规则 for rule in list(app.url_map.iter_rules()): if rule.endpoint == 'flasgger.apidocs': app.url_map._rules.remove(rule) break # 删除原有视图函数映射 del app.view_functions['flasgger.apidocs'] # 重新注册带token验证的/apidocs路由 @app.route('/apidocs', methods=['GET']) @tokenreq def protected_apidocs(): return apidocs_view()
方法二:给所有Flasgger路由添加验证
如果希望Swagger的所有相关接口(包括/swagger.json、/apidocs等)都需要JWT验证,可在初始化Flasgger时直接传入装饰器列表:
from flask import Flask from flasgger import Swagger from your_decorator_module import tokenreq app = Flask(__name__) # 初始化时给Flasgger所有路由添加tokenreq装饰器 swagger = Swagger(app, decorators=[tokenreq])
注意事项
- 方法二会导致Swagger UI加载文档时也需要携带有效JWT,否则无法获取
/swagger.json导致页面加载失败,适合完全封闭的内部文档场景。 - 确保你的
@tokenreq装饰器能正确处理未携带有效token的请求,返回标准的401 Unauthorized响应,避免Swagger UI出现异常。
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

