Python / Flask - 使用flask_restless和flask_httpauth

时间:2017-03-01 13:37:43

标签: python flask flask-restless flask-httpauth

我在这个问题上的目标是保护我的API。

在我的应用程序中,我正在使用Flask和flask_restless的{​​{1}}向我的APIManager对象提供CRUD API。

代码示例:

Person

并使用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}) @auth.login_required一起使用以使其无法响应匿名请求,我在文档中读到了有关预处理器的一些内容但也无法找到使用方法它与apimanager装饰者。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

不幸的是,看起来Flask-Restless目前还没有正式支持将视图装饰器附加到它管理的路线上。有一个open issue来添加此功能,还有another issue专门请求支持Flask-HTTPAuth。

还有一个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])

在您的情况下,您会将get_cache替换为auth.login_required

更新:正如下面评论中所讨论的,'{0}api0.{0}api'中的参数是表名,因此上述代码仅在表名留给Flask-SQLAlchemy生成时才有效。如果模型具有自定义表名,则使用该名称而不是model.__name__.lower()

答案 1 :(得分:1)

我建议您使用Flask-Security。关于如何使用它来保护API接口,有一个tutorial