0

0

Django Auditlog 中间件配置失效的解决方案

聖光之護

聖光之護

发布时间:2026-01-29 10:54:11

|

868人浏览过

|

来源于php中文网

原创

Django Auditlog 中间件配置失效的解决方案

django 使用 django-auditlog 时,若 `auditlogmiddleware` 位置不当(如位于 `sessionmiddleware` 或 `authenticationmiddleware` 之前),将无法正确捕获当前登录用户作为 actor_id,导致审计日志中 actor 字段为空。本文详解中间件正确顺序及配置要点。

在 Django 中,auditlog.middleware.AuditlogMiddleware 的核心职责是:在请求处理过程中自动提取当前已认证用户的 request.user,并将其 ID 绑定到后续模型变更的审计日志中(即 actor_id)。但该中间件高度依赖前置中间件提供的上下文——尤其是 SessionMiddleware(管理会话状态)和 AuthenticationMiddleware(将 request.user 注入请求对象)。若 AuditlogMiddleware 被置于它们之前,request.user 尚未被设置,自然无法获取 actor 信息。

因此,正确的中间件顺序必须满足以下依赖链:

  • SessionMiddleware → 提供会话支持;
  • AuthenticationMiddleware → 基于会话识别用户,设置 request.user;
  • AuditlogMiddleware → 必须紧随其后(或至少在其之后),才能读取有效的 request.user;
  • 其他中间件(如 CommonMiddleware、CsrfViewMiddleware 等)可按需安排,但不得破坏上述依赖。

你当前的配置中,AuditlogMiddleware 位于 SessionMiddleware 之后、AuthenticationMiddleware 之前,这是关键错误

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'auditlog.middleware.AuditlogMiddleware',  # ❌ 错误:此时 request.user 还未被设置!
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsMiddleware',     # ⚠️ 注意:CORS 中间件也应置于 CommonMiddleware 之前
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # ✅ 此处才设置 request.user
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

修正后的推荐顺序如下(已标注关键依赖)

可画AI
可画AI

Canva可画魔力工作室,一站式AI智能设计工具平台

下载
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',  # ✅ CORS 必须在 CommonMiddleware 之前(官方要求)
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # ✅ 设置 request.user
    'auditlog.middleware.AuditlogMiddleware',                    # ✅ 紧随其后,确保可读取 user
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

? 注意事项

  • AuditlogMiddleware 不可放在 AuthenticationMiddleware 之前,否则 request.user 为 AnonymousUser 或 None,actor_id 将写入 None;
  • 若使用 django-cors-headers,其 CorsMiddleware 必须位于 CommonMiddleware 之前(见 官方文档),否则跨域头可能不生效;
  • 确保用户已登录(即 request.user.is_authenticated 为 True),未登录用户的 actor_id 默认为 None(可通过 AUDITLOG_DISABLE_ON_ANONYMOUS_USER = False 强制记录,但需谨慎);
  • 修改中间件后,务必重启 Django 开发服务器(runserver)使配置生效;
  • 可通过调试确认:在视图中打印 request.user 和 request.user.pk,验证是否正常;也可在审计日志表(auditlog_logentry)中检查 actor_id 字段是否填充。

完成上述调整后,所有通过 Django Admin、视图或 ORM(如 save())触发的模型变更,都将自动记录操作人 ID,AUDITLOG_INCLUDE_ALL_MODELS = True 也将按预期工作。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

169

2026.02.04

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

184

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

12

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

1

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

2

2026.03.17

Nginx 基础架构:从安装配置到系统化管理
Nginx 基础架构:从安装配置到系统化管理

本专题深入解析Nginx基础架构,涵盖从源码编译与包管理安装,到核心配置文件优化及虚拟主机部署。进一步探讨日志轮转、性能调优、高可用集群构建及自动化运维策略,助力管理员实现从单一服务搭建到企业级系统化管理的全面升级,确保Web服务高效、稳定运行。

3

2026.03.17

mulerun骡子快跑入口地址汇总
mulerun骡子快跑入口地址汇总

本专题整合了mulerun入口地址合集,阅读专题下面的文章了解更多详细内容。

50

2026.03.17

源码编译安装Nginx详解:模块选择、依赖准备与常见错误排查
源码编译安装Nginx详解:模块选择、依赖准备与常见错误排查

本专题详解Nginx源码编译全流程:从GCC、OpenSSL等依赖准备,到按需定制HTTP/SSL/流媒体模块的configure参数策略。深入剖析“缺少库文件”、“配置选项冲突”及“权限错误”等常见报错,提供精准排查思路与解决方案。助您掌握灵活构建高性能、定制化Nginx的核心技能,满足复杂生产环境需求。

1

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 6.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号