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

Django Admin使用邮箱登录失败问题求助

解决Django自定义User模型用邮箱登录Admin失败的问题

问题诊断

你的自定义User模型中is_active字段默认值设为False,而创建超级用户时该字段未被自动设为True。Django认证系统要求用户必须处于激活状态(is_active=True)才能登录,因此即使邮箱和密码正确,也会被Admin登录页面拒绝。

临时解决方法(立即恢复登录)

通过Django Shell手动激活超级用户:

python manage.py shell

在Shell中执行:

from user.models import User
# 替换成你的超级用户邮箱
user = User.objects.get(email='your_superuser_email@example.com')
user.is_active = True
user.save()
exit()

执行完成后重新尝试登录Admin即可成功。

长期解决方案

方案1:修改is_active默认值

直接将模型中is_active的默认值改为True,确保新创建的用户(包括超级用户)默认处于激活状态:

class User(AbstractUser):
    email = models.EmailField("email", unique=True)
    create_date = models.DateField(auto_now_add=True)
    type_plan = models.ForeignKey(Plan, on_delete=models.SET_DEFAULT, default=1)
    phase_plan = models.IntegerField(default=0)
    # 修改默认值为True
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["username"]

修改后运行迁移命令更新数据库:

python manage.py makemigrations
python manage.py migrate

方案2:自定义UserManager控制超级用户状态

如果需要保持is_active默认值为False,但希望创建超级用户时自动激活,可以自定义用户管理器:

from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models

class UserManager(BaseUserManager):
    def create_superuser(self, email, username, password=None, **extra_fields):
        # 强制超级用户处于激活状态
        extra_fields.setdefault('is_active', True)
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if not email:
            raise ValueError('超级用户必须填写邮箱')
        if not username:
            raise ValueError('超级用户必须填写用户名')

        user = self.model(email=self.normalize_email(email), username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

class User(AbstractUser):
    email = models.EmailField("email", unique=True)
    create_date = models.DateField(auto_now_add=True)
    type_plan = models.ForeignKey(Plan, on_delete=models.SET_DEFAULT, default=1)
    phase_plan = models.IntegerField(default=0)
    is_active = models.BooleanField(default=False)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["username"]
    # 绑定自定义管理器
    objects = UserManager()

之后重新创建超级用户时,is_active会自动被设为True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:12:46