我希望创建一个Django自定义用户模型,以便我的用户可以使用电话或电子邮件登录。
这是我的建议解决方案
class ExtendedUser(AbstractBaseUser, PermissionsMixin):
phonenumber = PhoneNumberField(unique=True, null=True ..)
email = EmailField(unique=True, null=True ..)
...
USERNAME_FIELD = 'pk'
现在,当登录时,我可以像这样进行操作:
if cleaned_data['phonenumber']:
u = User.objects.get(phonenumber=cleaned_data['phonenumber'])
authenticate(username=u.pk, password=cleaned_data['password'])
...
elif cleaned_data['email']:
...
我不确定是否可以将USERNAME_FIELD
作为pk
。
如果不行,我们可以很容易地使用UUIDField。
这个方案可行吗?