- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 flask-restx
的 Flask 应用程序和 flask-login
.我希望默认情况下所有路由都需要登录,并明确定义不需要身份验证的公共(public)路由。我已经按照这个问题中给出的例子开始使用装饰器:
Best way to make Flask-Login's login_required the default
它适用于函数端点,但不适用于 restx
资源端点。
我尝试将函数添加为装饰器,并使用 method_decorators
field 。例如:
def public_route(decorated_function):
"""
This is a decorator to specify public endpoints in our flask routes
:param decorated_function:
:return:
"""
decorated_function.is_public = True
return decorated_function
class HelloWorld(ConfigurableResource):
method_decorators = {"get": [public_route]}
@public_route
@api.doc('Welcome message')
def get(self):
return {'hello': 'world'}
这个测试通过了:
def test_hello_world_is_public():
api = Namespace('health', description='Health related operations')
hello = HelloWorld(api, config=None, logger=None)
is_public_endpoint = getattr(hello.get, 'is_public', False)
assert is_public_endpoint
我的挑战是我看不到如何在我的身份验证逻辑中访问这个属性:
@app.before_request
def check_route_access():
"""
This function decides whethere access should be granted to an endpoint.
This function runs before all requests.
:return:
"""
is_public_endpoint = getattr(app.view_functions[request.endpoint], 'is_public', False)
if person_authorized_for_path(current_user, request.path, is_public_endpoint):
return
# Otherwise access not granted
return redirect(url_for("auth.index"))
这适用于普通函数端点,但不适用于 restx 资源。
restx
正在将我的资源类包装在一个函数中,以便flask 可以进行调度,但我不知道如何从这里访问装饰器。所以我有一些问题:
最佳答案
基于 this和 this , method_decorators
变量应该是一个函数列表,所以你应该像这样使用它:
def _perform_auth(method):
is_public_endpoint = getattr(method, 'is_public', False)
# place the validation here
class Resource(flask_restx.Resource):
method_decorators = [_perform_auth]
关于python - 将 auth 装饰器添加到 flask restx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63188214/
我想知道是否只有我一个人在为这样的问题苦苦挣扎。 让我们以字典为例: data = {'totalSize': 3000, 'freq': 2400, 'distribution':
如何在flaskRESTX中创建一个只有一个字符串字段而没有其他属性的Enum API模型,以便在swagger.yml中生成以下描述?。也许黑客会有所帮助?因为现在您似乎可以创建仅具有属性的API模
我有一个使用 flask-restx 的 Flask 应用程序和 flask-login .我希望默认情况下所有路由都需要登录,并明确定义不需要身份验证的公共(public)路由。我已经按照这个问题中
我有一个使用 Flask-Restx 和 JWT token 身份验证的 Flask REST API,并且正在通过 postman 进行调用。但是,当我尝试使用 swagger 时,发送的 toke
正如标题所提到的,我想要一个 @api.response(401, 'Unauthenticated')响应添加到所有需要身份验证的 API 的文档中。flask-resplus/restx显示锁定图
我是一名优秀的程序员,十分优秀!