Flask中Swagger无法自动添加请求头Token的问题求助
问题描述
我写了这段Flask代码:
authorizations = { 'Basic Auth': { 'type': 'basic', 'in': 'header', 'name': 'Authorization' }, } task_namespace = Namespace('task', security='Authorization', authorizations=authorizations, description='A namespace for tasks') @task_namespace.route('/') class TaskGetResource(Resource): @jwt_required(refresh=True) def get(self): user_id = get_jwt_identity() return Task.query.filter_by( user_id=user_id )
运行Flask应用后访问Swagger页面,我通过邮箱和密码完成了授权,但调用swagger里的/task接口时,请求头并没有自动添加Token。
问题原因
你配置的Swagger授权是Basic Auth,但接口实际用的是JWT Token验证,两者不匹配。Swagger的Basic Auth只会生成Basic <base64编码的账号密码>格式的请求头,而你的接口需要的是Bearer <JWT Token>格式的头,所以授权后不会自动带上正确的Token。
修复步骤
- 修改Swagger授权配置为JWT类型
把authorizations改成JWT的配置,让Swagger识别需要Bearer Token:authorizations = { 'Bearer Auth': { 'type': 'apiKey', 'in': 'header', 'name': 'Authorization', 'description': '输入格式为:Bearer <你的JWT Token>' } } - 更新Namespace的security参数
确保Namespace的security字段和你定义的授权键名一致,改成'Bearer Auth':task_namespace = Namespace( 'task', security='Bearer Auth', authorizations=authorizations, description='任务相关接口' ) - 把登录接口加入Swagger
必须将生成JWT Token的登录接口配置到Swagger中,这样可以直接在Swagger里调用登录接口拿到Token,后续Swagger会自动把Token填充到请求头。示例代码:@auth_namespace.route('/login') class LoginResource(Resource): @auth_namespace.doc( responses={200: '成功', 401: '认证失败'}, params={'email': '用户邮箱', 'password': '用户密码'} ) def post(self): data = request.get_json() user = User.query.filter_by(email=data['email']).first() if user and check_password_hash(user.password, data['password']): access_token = create_access_token(identity=user.id) refresh_token = create_refresh_token(identity=user.id) return {'access_token': access_token, 'refresh_token': refresh_token} return {'msg': '邮箱或密码错误'}, 401 - 在Swagger中完成JWT授权
重启应用后,Swagger的授权按钮会要求输入Bearer Token。先调用登录接口拿到refresh_token(因为你的接口用了@jwt_required(refresh=True)),然后以Bearer <refresh_token>的格式填入授权框,之后调用/task接口时,Swagger就会自动把Token加到请求头里。
额外说明
如果想让接口支持用普通的access_token访问,把装饰器改成@jwt_required()即可,授权时填入Bearer <access_token>就行。
内容的提问来源于stack exchange,提问作者Echchama Nayak
相关产品推荐
相关产品推荐

