我为Django创建了一个自定义用户模型,现在这些普通用户可以登录管理控制台。
我的自定义用户模型正在扩展AbstractBaseUser和我的自定义用户管理器集
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(email=CustomUserManager.normalize_email(email))
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email=email, password=password)
user.is_staff = True
user.is_admin = True
user.is_superuser = True
user.save(using=self._db)
return user
我的自定义用户模型设置了这个:
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(verbose_name='staff status', default=False,
help_text='Designates whether the user can log into this admin site.')
is_active = models.BooleanField(verbose_name='active', default=True,
我已手动检查每个用户(如果
我不会在登录时检查此用户).is_staff == True
.is_admin == True
.is_superuser == True
但这些都不是真的,但用户仍然可以登录管理控制台。
我正在登录这样的用户进行正常登录:
def authenticate(self, email=None, password=None):
"""
Authentication method
"""
try:
user = Account.objects.get(email=email)
if user.check_password(password):
return user
except Account.DoesNotExist:
return None
我使用Django内置的身份验证来管理控制台登录。我查看了Django文档,它说我必须
"但是,如果您的用户模型扩展了AbstractBaseUser,则需要定义自定义的ModelAdmin类。可以继承默认的django.contrib.auth.admin.UserAdmin;但是,您需要覆盖任何引用django.contrib.auth.models.AbstractUser上不在您的自定义User类上的字段的定义。"
因此,当我创建自定义ModelAdmin类时,是否还需要在此处为管理控制台定义身份验证?