fastapi 如何在中间件中抛出异常?

chatGPT 给我的方案是:raise HTTPException(status_code=401, detail="Invalid token")

但是实际没用,客户端收到的还是 500

实际应该 return 一个 response

参考代码:

@app.middleware("http")
async def get_user_id(request: Request, call_next):
    from core.mysql.models import SessionTable
    from core.mysql.models import SessionTable
    from core.mysql.models import UserTable
    from apps.user.schemas import User
    from playhouse.shortcuts import model_to_dict

    session_key = request.cookies.get("session_key")
    if session_key:
        try:
            session: SessionTable | None = SessionTable.get_or_none(
                session_key=session_key)
            if session:
                user_id = session.user_id
                if user_id:
                    request.state.user_id = user_id
                    user: UserTable | None = UserTable.get_or_none(id=user_id)
                    request.state.user = User(**model_to_dict(user))
        except Exception as error:
            logger.warning(error)
    if not session_key or not request.state.get('user_id', None):
        return Response(status_code=401, content='Invalid token')
    response = call_next(request)
    return response

universe_king
3.4k 声望680 粉丝