7

fastapi ミドルウェアでトークンを検証しようとしていますが、これは不可能のようです。必須ではありませんが、ミドルウェアは次の呼び出しを行う必要があると考えています。この python-fastapi バックエンドで一度にトークンを処理するための適切なソリューションを見つけることができません。どんな助けでも大歓迎です。

@app.middleware("http")
async def add_middleware_here(request: Request, call_next):
    token = request.headers["Authorization"]
    try:
        verification_of_token = verify_token(token)
        if verification_of_token:
            response = await call_next(request)
            return response
    except InvalidSignatureError as er:
        raise HTTPException(status_code=401)
4

2 に答える 2

6

応答を返す必要があります。それを機能させる方法を紹介します。

from fastapi.responses import JSONResponse

@app.middleware("http")
async def add_middleware_here(request: Request, call_next):
    token = request.headers["Authorization"]
    try:
        verification_of_token = verify_token(token)
        if verification_of_token:
            response = await call_next(request)
            return response
        else:
            return JSONResponse(status_code=403) # or 401
    except InvalidSignatureError as er:
        return JSONResponse(status_code=401)

このミドルウェアを使用すると、API に (トークン生成用の) ログイン ルートがないことを意味することに注意してください。

さらに、代わりにこの依存関係を使用することを検討する必要があります: https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/

もう 1 つのことは、ステータス コードにfastapi.statusを使用できることです。

于 2020-06-09T16:59:56.753 に答える