2

我只希望登录用户访问我的 RESTfull API。我一直在搜索,找不到任何告诉我如何做的来源。很奇怪,因为我认为保护数据很常见。

我正在使用一个Flask带有Flask-loginand的项目flask-Restless。我通过类 CRUD 我的数据SQL-alchemy来访问我的 MySQL 数据库。我创建了我的 RESTfull api,例如:

api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'])

我应该如何限制未登录的用户对我的 RESTfull api 的访问,或者我不能使用 flask-restless 进行访问?如果没有,我应该/可以更好地使用什么?

我正在尝试一些技术,所以欢迎任何方向的建议!

提前致谢


在玩了一些之后,我找到了解决方案。它可能不是最好的,但它不需要太多代码就可以解决问题:

@app.before_request
def before_request():
    if ('/api/' in str(request.url_rule)) && (not current_user.is_authenticated()):
        return redirect('/login')

这是正确的方法吗?为每个可能的 HTTP 请求添加 Preprosessors 需要大量代码。https://flask-restless.readthedocs.org/en/latest/customizing.html#request-preprocessors-and-postprocessors

4

1 回答 1

0

您似乎可以通过自定义 Flask-Restless来实现您想要的。您可以使用预处理器来拦截您的 API 请求。

这是一个片段。请注意,这是一个未经测试的片段。

def auth_func(*args, **kw):
    if not current_user.is_authenticated():
        raise ProcessingException(description='Not authenticated!', code=401)

api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'], preprocessors=dict(POST=[auth_func]))

同样,您可以将预处理器注册到您的APIManager,为所有 API 启用它。

api_manager = APIManager(app, flask_sqlalchemy_db=db, preprocessors=dict(POST=[auth_func]))
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'])
于 2015-10-18T00:58:40.847 回答