2.1 KiB
2.1 KiB
internal/app/middleware/auth.go- 中间件函数改造 (
AuthMiddleware):- 在
AuthMiddleware返回的echo.HandlerFunc内部,获取echo.Context的request.Context()作为upstreamCtx。 - 使用
newCtx, logger := logs.Trace(upstreamCtx, context.Background(), "AuthMiddleware")来创建newCtx和logger实例。 - 使用
c.SetRequest(c.Request().WithContext(newCtx))将更新后的newCtx写入echo.Context,以便后续处理链使用。 - 将所有对
controller.SendErrorWithStatus的调用替换为controller.SendErrorWithAudit。 - 确保
controller.SendErrorWithAudit接收newCtx作为第一个参数,并提供适当的actionType,description,targetResource。- 例如,对于“请求未包含授权标头”的错误,
actionType可以是“认证失败”,description是“请求未包含授权标头”,targetResource为nil。 - 对于“无效的Token”错误,
actionType可以是“认证失败”,description是“无效的Token”,targetResource是tokenString。
- 例如,对于“请求未包含授权标头”的错误,
- 在
AuthMiddleware内部,如果需要日志记录(例如tokenService.ParseToken失败或userRepo.FindByID失败),使用新创建的logger实例进行日志输出。 - 关键: 使用
c.SetRequest(c.Request().WithContext(newCtx))将更新后的Context写回echo.Context,以便传递给后续的中间件和Controller。
- 在
- 中间件函数改造 (
internal/app/middleware/audit.go- 改造动作:
- 检查并重构所有日志记录中间件。
- 中间件应该从请求的
c.Request().Context()中提取upstreamCtx。 - 使用
logs.Trace或logs.AddFuncName创建新的Context和Logger。 - 关键: 使用
c.SetRequest(c.Request().WithContext(newCtx))将更新后的Context写回echo.Context,以便传递给后续的中间件和Controller。
- 改造动作: