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