我这个问题的目的是保护我的API。
在我的应用程序中,我使用Flask和flask_restless的APIManager为我的Person对象提供CRUD API。
代码示例:
manager = APIManager(app, flask_sqlalchemy_db=db)
manager.create_api(Person, methods=['GET', 'POST', 'PATCH', 'DELETE'])还可以使用flask_httpauth来保护我的其他路由,比如:
@app.route('/auth/get-token')
@auth.login_required
def get_auth_token():
token = g.user.generate_auth_token()
return jsonify({'token': token.decode('ascii'), 'fullname': g.user.fullname})我不知道如何在apimanager中使用@auth.login_required而不让它响应匿名请求,我在文档中读到了一些关于预处理器的内容,但也找不到与@auth.login_required装饰器一起使用它的方法。
任何帮助都将不胜感激。
发布于 2017-03-03 00:01:52
不幸的是,看起来Flask-Restless目前并不正式支持将视图装饰器附加到它管理的路由。有一个添加此功能的open issue,也有专门请求支持Flask-HTTPAuth的another issue。
还有一个third issue,其中用户展示了在Flask-Restless创建其端点后手动注入装饰器的技术。用户示例中添加get_cache装饰器的代码片段如下:
manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db=db)
manager.create_api(Person, methods=['GET', 'POST', 'DELETE'])
manager.create_api(Person2, methods=['GET', 'POST', 'DELETE'])
# hackish view decoration:
for model in [Person, Person2]:
model_route = '{0}api0.{0}api'.format(model.__name__.lower())
app.view_functions[model_route] = get_cache(app.view_functions[model_route])在您的例子中,您可以用auth.login_required替换get_cache。
更新:正如下面的注释中所讨论的,'{0}api0.{0}api'中的参数是表名,因此只有当表名留给Flask-SQLAlchemy生成时,上面的代码才会起作用。如果模型具有自定义表名,则使用该名称而不是model.__name__.lower()。
发布于 2017-03-02 00:45:16
我建议您使用Flask-Security。有一个关于如何使用它来保护你的API接口的tutorial。
https://stackoverflow.com/questions/42533259
复制相似问题