我想在調用@jwt_required時爲標記添加額外的驗證。我想驗證其中一項索賠。有沒有我可以用JWTManager做到這一點?如何使用Flask和flask_jwt_extended進行自定義JWT驗證?
目前我的代碼只是調用:
jwt = JWTManager(app)
我裝飾與功能:@jwt_required
我想在調用@jwt_required時爲標記添加額外的驗證。我想驗證其中一項索賠。有沒有我可以用JWTManager做到這一點?如何使用Flask和flask_jwt_extended進行自定義JWT驗證?
目前我的代碼只是調用:
jwt = JWTManager(app)
我裝飾與功能:@jwt_required
關閉我的頭頂,我的傾向將創建一個包裝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的源代碼。
在您的其他問題中發佈此消息,但我也會在此發佈,以防其他人偶然發現此問題。
作者在這裏。對於它的價值,flask-jwt不支持要求聲明(即使它說明了它)。 https://github.com/mattupstate/flask-jwt/issues/98
編輯:這現在可用在flask-jwt-extended。 https://github.com/vimalloc/flask-jwt-extended/issues/64#issuecomment-318800617
乾杯
感謝這個vimalloc。我認爲我所有問題的解決方案是按照Nathan的建議來實現一個裝飾器。 –
我會在github上提出問題,因爲我認爲要求聲明的支持會很好,尤其是flask-jwt認爲它可以擴展所需參數列表的功能。 –
這看起來非常好Nathan和幫助我增加了基於角色的驗證的下一個步驟。唯一的問題是'''返回jwt_required''導致錯誤的地方:''''tuple'對象沒有屬性'__module __'''' –
我認爲這應該是:'''return view_function(* args ,** kwargs) return jwt_required(wrapper)''' –
我從來沒有運行代碼,所以我並不感到驚訝,它碰到了一個錯誤。隨意繼續編輯這個答案,以反映最終的工作。 –