瓶颈不安限制RESTfull api访问
我只希望登录用户访问我的RESTfull API。我一直在寻找,找不到任何来源告诉我如何去做。奇怪,因为我认为保护数据非常普遍。我正在使用项目Flask-login
和flask-Restless
。我通过SQL-alchemy
类来获取我的MySQL数据库。创建我的问题的REST API,如:瓶颈不安限制RESTfull api访问
api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Items, methods=['GET', 'POST', 'DELETE', 'PUT'])
我应该如何限制我的问题的REST API谁是没有登录,或者我不能用烧瓶躁动做用户?如果不是,我应该/能够更好地使用什么?
我正在尝试一些技巧,所以建议在任何方向都欢迎!
在此先感谢
经过一些玩弄我已经找到了解决方案。它可能不是最好的,但它没有太多的代码:
@app.before_request
def before_request():
if ('/api/' in str(request.url_rule)) && (not current_user.is_authenticated()):
return redirect('/login')
这是正确的路要走吗?添加Preprosessors对于每个可能的HTTP请求都有很多代码。 https://flask-restless.readthedocs.org/en/latest/customizing.html#request-preprocessors-and-postprocessors
看来你通过customizing 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'])
这将工作。我只是认为这可以做得更好。为什么?现在我不得不将所有的HTTP方法添加到preprosessors并且应该执行auth_func()。 'POST','GET_SINGLE','GET_MANY','PATCH_SINGLE'或'PUT_SINGLE','PATCH_MANY'或'PUT_MANY','DELETE_SINGLE''DELETE_MANY' 这是很多代码。 –
那你为什么不把预处理器注册到你的'APIManager'呢?当我第一次写我的答案时,我想你会希望对API访问进行良好的谷物控制。我用这个建议更新了我的答案。 – Trein
它已经好多了。我仍然需要为每个HTTP方法添加一个用户身份验证(请参阅上一条评论)。我仍然觉得有人必须使用太多的代码,我仍然在寻找更好的解决方案。 –
我试图做同样的事情,如果你有一个更好的解决方案,我希望你会分享:) –
有一个哈克的方式做到这一点上来: http://stackoverflow.com/questions/42533259/python-flask-flask-use-flask-restless-with-flask-httpauth –
好的方法以及.. –