如何在FastAPI请求中记录用户



我正试图通过创建一个自定义APIRoute-类来记录我的所有FastAPI请求(谁请求了,什么以及状态代码是什么(。这是我的自定义路线类:

class LoggingRoute(APIRoute):
def get_route_handler(self) -> Callable:
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
response: Response = await original_route_handler(request)
log_request(
user = request.user,
url = request.url,
method = request.method,
status_code = response.status_code
)
return response
return custom_route_handler

如果我们不想在日志中包含request.user,那么日志记录就会起作用。当尝试访问用户时,会抛出以下错误:

AssertionError: AuthenticationMiddleware must be installed to access request.user

我想请求的user属性还没有在路由处理程序中初始化。request.user在以后处理请求时工作良好。

我的问题是:有什么方法可以让我在custom_route_handler-函数中访问request.user吗?如果没有,是否还有其他方法可以实现日志记录功能,并能够记录用户?

您必须安装AuthenticationMiddleware

https://www.starlette.io/authentication/#users
安装AuthenticationMiddleware后,request.user接口将可用于端点或其他中间件。

app = FastAPI(middleware=[Middleware(AuthenticationMiddleware)])

最新更新