授权标头未显示在flask_smorest蓝图中

问题描述 投票:0回答:1

我有一个使用flask_smorest、pyJWT、flask_sqlalchemy等的flask应用程序。 我正在创建路线

/me
来获取当前用户详细信息 但是当我使用邮递员点击该网址时,它可以通过正确的标头正常工作。但在 swagger UI 的情况下则不然。使用 swagger UI 测试端点时,它没有传递 Auth 标头。

我已经声明了一个文档,用于在 blueprint.doc 装饰器中添加身份验证,如下所示 -


def login_required(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        authorization = request.headers.get("Authorization", None)
        if not authorization:
            abort(403, message='no authorization token provided')

        auth_type, token = authorization.split(' ')
        if "Bearer" not in auth_type:
            abort(403, message="Token type should be bearer")
        try:
            decoded_token = jwt.decode(token)
            current_user = models.UserModel.get_by_email(email=decoded_token['identity'])
            return f(*args, **kwargs, current_user=current_user)

        except Exception as e:
            abort(401, message="Invalid or expired token")

    return wrapper

body = {
    'name': 'Authorization',
    'in': 'header',
    'description': 'Authorization Bearer <access_token>',
    'required': 'true',
    'default': "nothing",
}


@blp.route("/me")
class Identity(MethodView):

    @blp.doc(parameters=[body])
    @login_required
    def get(self, current_user):
        print(current_user)
        return {"data": current_user.to_json()}

@blp.doc
装饰器适用于除授权之外的所有其他标头。

也许flask_smorest中还存在其他内置授权方法 请帮助我。

即使我像 args Schema 方式一样传递 - 它也没有通过 swagger UI 传递

@blp.arguments(AuthSchema, location='headers')

swagger-UI 标题

python flask jwt flask-smorest
1个回答
0
投票

您需要添加到应用程序配置中:

API_SPEC_OPTIONS = {
    "components": {
        "securitySchemes": {
            "Bearer Auth": {
                "type": "apiKey",
                "in": "header",
                "name": "Authorization",
                "bearerFormat": "JWT",
                "description": "",
            }
        }
    },
}

对于方法,您应该使用带有安全参数的装饰器:

@api.doc(
   security=[{"Bearer Auth": []}],
)

它应该生成正确的文档。您可以阅读有关此内容的更多信息https://github.com/marshmallow-code/flask-smorest/issues/36

© www.soinside.com 2019 - 2024. All rights reserved.