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
相关产品推荐
相关产品推荐

