2017-07-06 83 views

回答

2

關閉我的頭頂,我的傾向將創建一個包裝jwt_required的定製的裝飾。

下面是它可能如何看一個大概的瞭解,通過the functools.wraps documentation

from functools import wraps 
from flask_jwt_extended import jwt_required 
from flask_jwt_extended.view_decorators import _decode_jwt_from_request 
from flask_jwt_extended.exceptions import NoAuthorizationError 

def custom_validator(view_function): 
    @wraps(view_function) 
    def wrapper(*args, **kwargs): 
     jwt_data = _decode_jwt_from_request(request_type='access') 

     # Do your custom validation here. 
     if (...): 
      authorized = True 
     else: 
      authorized = False 

     if not authorized: 
      raise NoAuthorizationError("Explanation goes here") 

     return view_function(*args, **kwargs) 

return jwt_required(wrapper) 

@app.route('/') 
@custom_validator 
def index(): 
    return render_template('index.html') 

Here在這裏你可以找到jwt_required的源代碼。

+0

這看起來非常好Nathan和幫助我增加了基於角色的驗證的下一個步驟。唯一的問題是'''返回jwt_required''導致錯誤的地方:''''tuple'對象沒有屬性'__module __'''' –

+0

我認爲這應該是:'''return view_function(* args ,** kwargs) return jwt_required(wrapper)''' –

+1

我從來沒有運行代碼,所以我並不感到驚訝,它碰到了一個錯誤。隨意繼續編輯這個答案,以反映最終的工作。 –

1

在您的其他問題中發佈此消息,但我也會在此發佈,以防其他人偶然發現此問題。

作者在這裏。對於它的價值,flask-jwt不支持要求聲明(即使它說明了它)。 https://github.com/mattupstate/flask-jwt/issues/98

編輯:這現在可用在flask-jwt-extended。 https://github.com/vimalloc/flask-jwt-extended/issues/64#issuecomment-318800617

乾杯

+0

感謝這個vimalloc。我認爲我所有問題的解決方案是按照Nathan的建議來實現一個裝飾器。 –

+0

我會在github上提出問題,因爲我認爲要求聲明的支持會很好,尤其是flask-jwt認爲它可以擴展所需參數列表的功能。 –

相關問題