我只希望登录的用户访问我的RESTfull API。我一直在到处找,找不到任何来源告诉我怎么做。很奇怪,因为我认为保护数据是很常见的。
我正在使用Flask-login
和flask-Restless
的Flask
项目。我通过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'])