Add logic for phone (without '+' or '+7')
This commit is contained in:
parent
15e0466fb8
commit
c2d0dc7b27
@ -2,4 +2,7 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(SiteUser)
|
@admin.register(SiteUser)
|
||||||
|
class DevEventAdmin(admin.ModelAdmin):
|
||||||
|
# fields = ['name', 'surname', 'phone', 'email', 'register_datetime']
|
||||||
|
readonly_fields = ['register_datetime']
|
||||||
|
@ -9,6 +9,7 @@ import random
|
|||||||
import traceback
|
import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import requests
|
import requests
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class PhoneVerificationService:
|
class PhoneVerificationService:
|
||||||
@ -54,7 +55,7 @@ class PhoneVerificationService:
|
|||||||
request_success = False
|
request_success = False
|
||||||
try:
|
try:
|
||||||
params = {
|
params = {
|
||||||
"phone": phone,
|
"phone": lambda: phone[1:] if phone.startswith("+") else phone,
|
||||||
"ip": -1,
|
"ip": -1,
|
||||||
"api_id": PHONE_VERIFICATION_APP_ID
|
"api_id": PHONE_VERIFICATION_APP_ID
|
||||||
}
|
}
|
||||||
@ -154,8 +155,18 @@ class SiteAccountManager(BaseUserManager):
|
|||||||
user.save(using=self._db)
|
user.save(using=self._db)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
def get_by_natural_key(self, email_):
|
def get_by_natural_key(self, phone_):
|
||||||
return self.get(email=email_)
|
# Гоша попросил запилить фичу, чтобы принимались номера:
|
||||||
|
# +79991112233
|
||||||
|
# 79991112233
|
||||||
|
# 9991112233
|
||||||
|
|
||||||
|
if re.match("^[0-9]{10}$", phone_) is not None:
|
||||||
|
phone_ = f"+7{phone_}"
|
||||||
|
elif re.match("^7[0-9]{10}$", phone_) is not None:
|
||||||
|
phone_ = f"+{phone_}"
|
||||||
|
|
||||||
|
return self.get(phone=phone_)
|
||||||
|
|
||||||
|
|
||||||
class SiteUser(AbstractBaseUser, PermissionsMixin):
|
class SiteUser(AbstractBaseUser, PermissionsMixin):
|
||||||
@ -167,8 +178,11 @@ class SiteUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
])
|
])
|
||||||
is_staff = models.BooleanField(default=False, verbose_name="Разрешение на вход в админку")
|
is_staff = models.BooleanField(default=False, verbose_name="Разрешение на вход в админку")
|
||||||
is_phone_verified = models.BooleanField(default=False, verbose_name="Телефон верифицирован")
|
is_phone_verified = models.BooleanField(default=False, verbose_name="Телефон верифицирован")
|
||||||
REQUIRED_FIELDS = ['name', 'surname', 'phone']
|
|
||||||
USERNAME_FIELD = 'email'
|
register_datetime = models.DateTimeField(default=datetime.now, editable=False)
|
||||||
|
|
||||||
|
REQUIRED_FIELDS = ['name', 'surname', 'email']
|
||||||
|
USERNAME_FIELD = 'phone'
|
||||||
|
|
||||||
objects = SiteAccountManager()
|
objects = SiteAccountManager()
|
||||||
|
|
||||||
@ -176,7 +190,21 @@ class SiteUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
return self.email
|
return self.email
|
||||||
|
|
||||||
def natural_key(self):
|
def natural_key(self):
|
||||||
return self.email
|
return self.phone
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_by_natural_key(key):
|
||||||
|
# Гоша попросил запилить фичу, чтобы принимались номера:
|
||||||
|
# +79991112233
|
||||||
|
# 79991112233
|
||||||
|
# 9991112233
|
||||||
|
|
||||||
|
if re.match("^[0-9]{10}$", key) is not None:
|
||||||
|
key = f"+7{key}"
|
||||||
|
elif re.match("^7[0-9]{10}$", key) is not None:
|
||||||
|
key = f"+{key}"
|
||||||
|
|
||||||
|
return SiteUser.objects.get(phone=key)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.email
|
return f"{self.name} {self.surname}: {self.phone} ({self.email})"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from account.models import SiteUser
|
from account.models import SiteUser, SiteAccountManager
|
||||||
|
|
||||||
from hashlib import sha512
|
from hashlib import sha512
|
||||||
from django.contrib.auth.hashers import check_password
|
from django.contrib.auth.hashers import check_password
|
||||||
@ -25,15 +25,15 @@ class UserToken(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def auth(login: str, password: str):
|
def auth(login: str, password: str):
|
||||||
user = SiteUser.objects.filter(email=login)
|
try:
|
||||||
|
user = SiteUser.get_by_natural_key(login)
|
||||||
if len(user) == 0:
|
except Exception:
|
||||||
raise Exception(API_ERROR_INVALID_LOGIN)
|
raise Exception(API_ERROR_INVALID_LOGIN)
|
||||||
|
|
||||||
if not check_password(password, user[0].password):
|
if not check_password(password, user.password):
|
||||||
raise Exception(API_ERROR_INVALID_PASSWORD)
|
raise Exception(API_ERROR_INVALID_PASSWORD)
|
||||||
|
|
||||||
return user[0]
|
return user
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def deauth(token: str):
|
def deauth(token: str):
|
||||||
|
Reference in New Issue
Block a user