2015-10-17 99 views
2

我只希望登錄用戶訪問我的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

好的方法以及.. –

回答

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方法添加一個用戶身份驗證(請參閱上一條評論)。我仍然覺得有人必須使用太多的代碼,我仍然在尋找更好的解決方案。 –