关于python:fastapi-如何在中间件中抛出-401

4次阅读

共计 894 个字符,预计需要花费 3 分钟才能阅读完成。

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
正文完
 0