瓶颈不安限制RESTfull api访问

问题描述:

我只希望登录用户访问我的RESTfull API。我一直在寻找,找不到任何来源告诉我如何去做。奇怪,因为我认为保护数据非常普遍。我正在使用项目Flask-loginflask-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

+0

我试图做同样的事情,如果你有一个更好的解决方案,我希望你会分享:) –

+0

有一个哈克的方式做到这一点上来: http://stackoverflow.com/questions/42533259/python-flask-flask-use-flask-restless-with-flask-httpauth –

+0

好的方法以及.. –

看来你通过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']) 
+0

这将工作。我只是认为这可以做得更好。为什么?现在我不得不将所有的HTTP方法添加到preprosessors并且应该执行auth_func()。 'POST','GET_SINGLE','GET_MANY','PATCH_SINGLE'或'PUT_SINGLE','PATCH_MANY'或'PUT_MANY','DELETE_SINGLE''DELETE_MANY' 这是很多代码。 –

+0

那你为什么不把预处理器注册到你的'APIManager'呢?当我第一次写我的答案时,我想你会希望对API访问进行良好的谷物控制。我用这个建议更新了我的答案。 – Trein

+0

它已经好多了。我仍然需要为每个HTTP方法添加一个用户身份验证(请参阅上一条评论)。我仍然觉得有人必须使用太多的代码,我仍然在寻找更好的解决方案。 –