feat: DB constraints for phone auth
This commit is contained in:
@@ -4,6 +4,7 @@ from datetime import timedelta
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
@@ -42,7 +43,7 @@ class UserManager(BaseUserManager):
|
||||
|
||||
class User(AbstractBaseUser, PermissionsMixin):
|
||||
email = models.EmailField(unique=True, null=True, blank=True)
|
||||
phone_number = models.CharField(max_length=20, unique=True, null=True, blank=True)
|
||||
phone_number = models.CharField(max_length=20, unique=True)
|
||||
role = models.CharField(max_length=20, choices=UserRole.choices, default=UserRole.CUSTOMER)
|
||||
first_name = models.CharField(max_length=150, blank=True)
|
||||
last_name = models.CharField(max_length=150, blank=True)
|
||||
@@ -62,6 +63,14 @@ class User(AbstractBaseUser, PermissionsMixin):
|
||||
USERNAME_FIELD = "phone_number"
|
||||
REQUIRED_FIELDS = [] # email is optional; phone_number is the identifier
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.CheckConstraint(
|
||||
name="accounts_user_phone_e164_format",
|
||||
condition=Q(phone_number__regex=r"^\+[1-9][0-9]{7,14}$"),
|
||||
),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return self.email or self.phone_number or str(self.id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user