flask-restless限制restful api访问



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

我正在使用Flask-loginflask-RestlessFlask项目。我通过SQL-alchemy类CRUD我的数据来访问我的MySQL数据库。我像这样创建RESTfull api:

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

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

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

Thanks in advance


经过更多的玩耍,我找到了一个解决方案。它可能不是最好的,但它不需要太多代码就能达到目的:

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

这条路对吗?为每个可能的HTTP请求添加预处理器需要编写大量代码。https://flask-restless.readthedocs.org/en/latest/customizing.html request-preprocessors-and-postprocessors

似乎您通过自定义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'])

相关内容

  • 没有找到相关文章

最新更新