Django中无法配置Auditlog中间件获取actor_id问题求助
Django Auditlog 无法自动记录 actor_id 问题
问题描述
根据文档要求,自动获取actor_id需在MIDDLEWARE中配置auditlog.middleware.AuditlogMiddleware,但完成配置后仍无法记录数据修改者信息,其余功能均正常运行。
当前配置代码:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'auditlog.middleware.AuditlogMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] AUDITLOG_INCLUDE_ALL_MODELS = True
排查与解决方案
- 调整中间件顺序:
AuditlogMiddleware必须放在AuthenticationMiddleware之后。审计中间件依赖认证中间件获取当前登录用户,原配置中顺序错误导致无法读取用户信息。修改后的MIDDLEWARE配置:MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'auditlog.middleware.AuditlogMiddleware', # 移至认证中间件之后 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] - 确认用户登录状态:确保操作数据的用户处于已登录状态,匿名用户不会被记录为actor。
- 验证模型配置:虽开启
AUDITLOG_INCLUDE_ALL_MODELS = True,部分特殊模型可能需手动注册。可尝试为单个模型添加AuditlogMixin测试:from auditlog.models import AuditlogMixin class YourModel(AuditlogMixin, models.Model): # 模型字段定义 - 处理后台任务场景:若通过Celery等后台任务修改数据,请求上下文不存在,需手动设置actor:
from auditlog.context import set_actor def your_task(user_id): user = User.objects.get(id=user_id) with set_actor(user): # 执行数据修改操作
内容的提问来源于stack exchange,提问作者Зуфар Тангрибергенов
相关产品推荐
相关产品推荐

