常规自定义用户可以登录Django的管理控制台

时间:2015-10-11 09:34:56

标签: django django-models django-admin admin django-custom-user

我为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类时,是否还需要在此处为​​管理控制台定义身份验证?

0 个答案:

没有答案