[英]How to put auth functionality in @app.before_request in flask
[英]How to return flask response from the middleware(app.before_request()) in flask?
我在我的應用程序中聲明了一個中間件部分,在請求之前在哪里執行一些代碼。 在 flask 中有兩個裝飾器@app.before_request
和@app.after_request
通過使用它們我們可以聲明一個中間件部分。 我想在中間件中驗證 JWT 令牌的身份驗證。
@app.before_request
def before_request_callback():
try:
# Checking jwt-authentication for every request
verify_jwt_in_request()
except:
#Fill this block
如果令牌有問題,那么我想捕獲該異常並返回消息“無效令牌”。 我不想執行進一步的代碼。 那么如何從那個 except 塊返回響應呢?
正如文檔中所提到的,您可以以與從 Flask 視圖代碼中正常完成的方式相同的方式返回響應。 例如:
@app.before_request
def before_request_callback():
try:
# Checking jwt-authentication for every request
verify_jwt_in_request()
except:
return 'invalid token', 401
知道如何解決它。
@app.before_request
def before_request_callback():
try:
# Checking jwt-authentication for every request except login
verify_jwt_in_request()
except:
return make_response(jsonify(error_dict(current_request_id(), 'Invalid token ', 401)),
status.HTTP_401_UNAUTHORIZED)
對於燒瓶 jwt 擴展,您根本不需要捕獲異常。 只需使用verify_jwt_in_request()
就足夠了,它會調用默認錯誤處理程序並返回適當的響應,說明令牌不存在或無效的原因。 您可以在此處查看默認響應並對其進行自定義: https : //flask-jwt-extended.readthedocs.io/en/stable/api/#module-flask_jwt_extended
你可以使用flask-http-middleware
鏈接
from flask import Flask, jsonify
from flask_http_middleware import MiddlewareManager, BaseHTTPMiddleware
app = Flask(__name__)
class AccessMiddleware(BaseHTTPMiddleware):
def __init__(self):
super().__init__()
def dispatch(self, request, call_next):
if request.headers.get("token") == "secret":
return call_next(request)
else:
return jsonify({"message":"invalid token"})
app.wsgi_app = MiddlewareManager(app)
app.wsgi_app.add_middleware(MetricsMiddleware)
@app.get("/health")
def health():
return {"message":"I'm healthy"}
if __name__ == "__main__":
app.run()
每次你發出請求,它都會通過中間件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.