在python-fast Api中间件中引发异常 [英] Raise exception in python-fastApi middleware

查看:0
本文介绍了在python-fast Api中间件中引发异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Fastapi中间件中验证令牌,但这似乎是不可能的。正如我所想的那样,中间件需要进行下一次调用,尽管这不是必需的。我找不到任何好的解决方案来在这个python-fast api后端一次性处理令牌。如有任何帮助,我们不胜感激。

@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)

推荐答案

您需要返回响应。我将向您展示如何使其工作:

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/

另外,您可以使用fastapi.status作为状态代码。

这篇关于在python-fast Api中间件中引发异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆