如何实现flaskrestplus授权

Alw*_*mer 5 token flask flask-restplus

我正在尝试在 Flask-restplus 应用程序中设置身份验证。我想向应用程序中的所有端点添加身份验证,但不想在每个路由上编写装饰器。

我正在寻找基于 apikey 的身份验证。问题是,我无法确定如何拦截所有请求并检查标头中的身份验证令牌。

当前代码:

authorization = {
    'apikey': {
        'type': 'apiKey',
        'in': 'header',
        'name': 'x-auth'
    }
}
api = Api(
    title='title',
    version='1.0',
    description="List of API's ",
    validate=True,
    authorizations=authorization,
    security='apikey'
)
Run Code Online (Sandbox Code Playgroud)

完成上述步骤后,当我打开 swagger 时,我可以使用授权按钮添加令牌。但是一旦令牌被传递,我就无法拦截请求并验证令牌是否正确。

目前,我能找到的所有示例都在每条路线上添加了另一个装饰器,这是我不想要的,因为它会导致糟糕的设计和重复的代码。

目前我得到的最接近的例子是:
https://www.youtube.com/watch?v=

xF30i_A6cRw&list=LLpaDwEA6bAAPZU5lz0ZRsuw&index=1,但它还在每条路线上使用装饰器。

所以问题陈述是:

如何拦截所有请求并检查标头中的正确令牌,而不在所有路由上添加装饰器

小智 0

最近,我遇到了类似的问题。但幸运的是,我们确实有接受装饰器列表的命名空间,您可以在资源级别传递自定义装饰器,并且默认情况下它将实现该资源的每个方法。

api = Namespace(
    'some Name here',
    description='some description',
    security='apiKey',
    authorizations = authorizations,
    decorators= [token_required]
)
Run Code Online (Sandbox Code Playgroud)

但需要注意的一点是,我必须在方法中指定每个文档的安全性,如下所示:

@api.doc('some operation', security = 'apiKey')
Run Code Online (Sandbox Code Playgroud)

这样做的好处是一键授权流向资源中的每个方法。