You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django对接MongoDB的CVAT登出未删session导致二次登录失败如何解决

CVAT集成MongoDB二次登录报错修复方案

报错信息与根因

二次登录CVAT时提示「Could not login」,浏览器控制台报错如下:
FAILED SQL: INSERT INTO "auth_user_groups" ("user_id", "group_id") VALUES (%(0)s, %(1)s)
报错截图:
数据库相关浏览器控制台报错
根因:首次登录后登出时,Django未自动删除auth_user_groups集合内关联的session id,二次登录时插入重复记录触发唯一索引冲突,导致登录流程中断。

无需手动删库的修复方案

以下三种方案任选一种即可实现多次登录登出无异常:

方案1:修改用户组分配逻辑为幂等操作

修改CVAT认证模块中用户组分配的代码,插入前先判断记录是否存在,避免重复插入:

  1. 找到CVAT认证后端代码,默认路径为cvat/apps/iam/backends.py
  2. 找到登录成功后给用户分配默认用户组的代码段,替换为如下逻辑:
from django.contrib.auth.models import Group

# 原有的认证成功后处理逻辑中,替换用户组添加逻辑
def assign_default_groups(user):
    # 替换为你实际配置的默认用户组名称
    target_group, _ = Group.objects.get_or_create(name="default")
    # 先判断关联关系是否已存在,不存在才执行插入
    if not target_group.user_set.filter(id=user.id).exists():
        target_group.user_set.add(user)

方案2:绑定登出信号自动清理关联记录

通过Django登出信号触发自动清理逻辑,每次用户登出时自动删除auth_user_groups中对应用户的关联记录:

  1. 在cvat/apps/iam目录下新建signals.py文件,写入如下代码:
from django.contrib.auth.signals import user_logged_out
from django.dispatch import receiver
from django.contrib.auth.models import UserGroup

@receiver(user_logged_out)
def clear_auth_group_relation_on_logout(sender, user, request, **kwargs):
    # 可过滤不需要清理的用户,比如超级管理员
    if user and not user.is_superuser:
        UserGroup.objects.filter(user_id=user.id).delete()
  1. 打开同目录下的apps.py,注册信号:
from django.apps import AppConfig

class IamConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'cvat.apps.iam'

    def ready(self):
        # 导入信号完成注册
        import cvat.apps.iam.signals

方案3:修改数据库配置忽略插入冲突

如果你使用djongo作为MongoDB的Django驱动,可以直接修改数据库配置,遇到重复插入冲突时自动忽略错误,不阻断登录流程:
打开CVAT的Django配置文件settings.py,修改数据库配置项:

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': '你的MongoDB数据库名称',
        'CLIENT': {
            'host': '你的MongoDB服务地址',
            'port': 27017,
            # 有鉴权的话补充username、password配置
        },
        'OPTIONS': {
            # 开启插入冲突忽略,重复唯一索引插入时不会抛出错误
            'ignore_conflicts': True
        }
    }
}

验证方法

完成任意一种方案的修改后,重启CVAT所有服务,连续执行多次登录、登出操作,无需手动清理MongoDB数据,即可正常登录无报错。

内容的提问来源于stack exchange,提问作者tec data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:07