Login / register using phone or email for django, allauth integration

瘦欲@ 提交于 2019-12-05 08:36:51

I ended up creating a new application for storing and managing phone numbers for users. Logic is that when the User signs up with an email, regular all-auth flow triggers. When the user signs up with a phone number, I use my custom models / views / authentication to log the user in, verify, etc.

Below are my models:

class User(AbstractBaseUser, PermissionsMixin):
    email = EmailLoginField(blank=True, unique=True, null=True) # used as login as can't be null.
    email2 = models.EmailField(blank=True, null=True)  # for users who joined with phone and added email to emailfield.
    phone = models.CharField(max_length=30, null=True, blank=True)

--- inside the phonenumber application

class PhoneNumber(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('user'), on_delete=models.CASCADE)
    phone = models.CharField(unique=app_settings.UNIQUE_PHONE, max_length=254, verbose_name=_('phone number'))
    verified = models.BooleanField(verbose_name=_('verified'), default=False)
    primary = models.BooleanField(verbose_name=_('primary'), default=False)

class PhoneConfirmation(models.Model):
    phone_number = models.ForeignKey(PhoneNumber, verbose_name=_('phone number'))
    created = models.DateTimeField(verbose_name=_('created'), default=timezone.now)
    sent = models.DateTimeField(verbose_name=_('sent'), null=True)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!