Django:自定义用户

我在我的Django应用程序中有以下用户:
1.普通用户(UUID,电子邮件,姓名,地址,密码)
2.远程应用程序(UUID,名称,生成随机密码)
3.(其他类型的远程应用程序)

普通用户的身份验证将使用网页电子邮件+密码远程应用程序的身份验证将使用UUID +随机秘密和JSON来请求临时令牌

我不知道如何在Django中处理这个问题。 我想从AbstractBaseUser创建AuthBaseUser,如下所示:

class AuthBaseUser(AbstractBaseUser, PermissionsMixin):
    pk = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False,)
    name = models.CharField(_('name'), max_length=128, blank=False)
    typ = models.CharField(max_length=16, choices=USER_TYPES, default='normaluser',)
    date_joined = models.DateTimeField(_('date joined'), auto_now_add=True, default=timezone.now)
    last_login = models.DateTimeField(_('last login'), auto_now_add=True)
    is_active = models.BooleanField(_('active'), default=True)

然后,我想创建一个RemoteAppUser和NormalUser,像这样1:1映射:

class NormalUser(AuthBaseUser):
    user = models.OneToOneField(AuthBaseUser, on_delete=models.CASCADE)
    email = models.EmailField(_('email address'), unique=True)
    is_superuser = models.BooleanField(_('superuser'), default=True)
    #password = #not decided yet what to add here; for remote app we will have 256b of SHA256's random generated value

    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = AuthBaseUser.REQUIRED_FIELDS.append(['email', 'password', ])

    objects = NormalUserManager()

    def __init__(self, *args, **kwargs):
        super(AuthBaseUser, self).__init__(*args, **kwargs)

    def __str__(self):
        return self.get_username()

    def get_full_name(self):
        return self.get_username()

    def get_short_name(self):
        return self.get_username()

当然,我必须添加默认的auth用户:

AUTH_USER_MODEL = 'myauth.AuthBaseUser'

有没有推荐的方式来处理这些不同的用户? 请注意,例如,我想将RemoteApp的秘密存储为SHA256,但我不需要使用种子等多次运行排列。


可能只是创建这样的东西:

class User(AbstractBaseUser, PermissionsMixin):
    name = models.CharField(_('name'), max_length=128, blank=False)
    is_normal = models.BooleanField(default=False)
    is_other = models.BooleanField(default=False)

一个类用于两种类型的认证,并只检查is_normal用户或is_other用户

更新:

尝试像这样:

class EnterpriseEntry(models.Model):
    user = models.ForeignKey('User', null=False, blank=False, verbose_name=u'Пользователь',
                         related_name='enterprise_entries')
    position = models.CharField(
    max_length=100, default="", blank=True, verbose_name=u'Позиция в компании')

    ADMIN_ENTERPRISE = 0
    USER = 1
    ENTREPRENEUR = 2
    UNKNOWN = 3
    MODERATOR = 4

    PROFILE_TYPES = (
        (ADMIN_ENTERPRISE, u'Руководитель юридического лица'),
        (USER, u'Пользователь приглашенный в предприятие'),
        (ENTREPRENEUR, u'Индивидуальный предприниматель'),
        (MODERATOR, u'Модератор компании'),
        (UNKNOWN, u'Не известно'),
    )
链接地址: http://www.djcxy.com/p/33809.html

上一篇: Django: custom users

下一篇: Custom Authentication Backend in Django